Go 只为init语句输入函数一次

Go 只为init语句输入函数一次,go,Go,我开始用Go编程,我试图创建一个程序,对数据库进行查询并返回数据。我已经做到了这一点,但在此过程中我遇到了一些问题 首先,我试图创建一个带有条件的for,告诉程序何时我要停止查询,但是for的Init语句看起来只计算了一次——并且我再也没有被要求通过终端输入输入—(我在这里读到了,这是因为他的值为hold,然后它不再执行该函数:): 已编辑 func main() { var query string for query = ReadQuery(); query != "exit

我开始用Go编程,我试图创建一个程序,对数据库进行查询并返回数据。我已经做到了这一点,但在此过程中我遇到了一些问题

首先,我试图创建一个带有条件的for,告诉程序何时我要停止查询,但是for的Init语句看起来只计算了一次——并且我再也没有被要求通过终端输入输入—(我在这里读到了,这是因为他的值为hold,然后它不再执行该函数:):

已编辑

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语句来实现这一点,并避免代码中出现更多行。非常感谢

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

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

对该功能有很好的解释。

您是否考虑过q:=f()的
;q!=“退出”;q=f(){
?你的问题中有太多的代码。如果“只有前三行是重要的”,请仅包括前三行。一般来说,帖子a。您似乎知道for循环的init语句只执行一次,这是您的问题。那么,实际问题是什么?谢谢,mkopriva,我没有考虑到这一点!是的,您是对的,Flimzy,我将清理帖子,使具有sam的任何人都能更清楚地看到它问题。我一直在寻找一个更清晰的实现我想要做的事情,沃尔克。感谢你们所有人的快速响应这几乎就是“init语句”的定义。它初始化循环。如果它运行不止一次,那将是极其误导的。