仅在init语句中一次输入函数

时间:2019-03-13 11:59:14

标签: go

我开始使用Go进行编程,并且试图创建一个程序来查询数据库并返回数据。我已经实现了,但是在此过程中遇到了一些问题和疑问。

首先,我尝试创建一个带条件的for程序,该条件告诉程序我何时要停止查询,但是for的Init语句仅被评估一次-而且再也不会要求我通过输入terminal-(我在这里读到这是因为他的值保持不变,然后它不再执行该功能:Golang switch statement only calls function once):

已编辑

func main() {
    var query string
    for query = ReadQuery(); query != "exit\n"; {
        rows, err := db.Query(query)
        //Printing results and other operations
    }
    fmt.Println("Exiting")
}

func ReadQuery() string {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Enter query in a single line, with no newline. 'exit' to terminate execution: \n")
    query, _ :=reader.ReadString('\n')
    reader.Reset(os.Stdin)
    return query
}

...所以我完成了此修复,对我来说看起来有点脏:

func main() {
    var query string
    for {
        query = ReadQuery()
        if query == "exit\n" {
            fmt.Println("Exiting")
            break
        }
        //Printing results and other operations
    }
}

func ReadQuery() string {
   reader := bufio.NewReader(os.Stdin)
   fmt.Print("Enter query in a single line, with no newline. 'exit' to terminate execution: \n")
   query, _ :=reader.ReadString('\n')
   reader.Reset(os.Stdin)
   return query
}

所以问题是,是否还有另一种方法可以使用for语句并避免在我的代码中出现更多行。非常感谢

1 个答案:

答案 0 :(得分:0)

您需要在循环中添加一个post语句,该语句将在每次迭代时调用。

var query string
for query = ReadQuery(); query != "exit\n"; query = ReadQuery() {
    // loop body
}

Go Tour对此功能有很好的解释。