Go fmt.Printf未在循环内执行

Go fmt.Printf未在循环内执行,go,Go,我在Go中编写了一个小程序,用于检查服务器的状态是否在按主机名列出的服务器列表中。我有一个函数,一旦从http.GET类型服务器中检索并存储了一个服务器类型,它就可以对该服务器类型进行迭代 我可以在下面注销,并查看这两个选项的计算结果是否正确: // fmt.Printf("Server: %s - Status: %s\n", server.Name, status) // fmt.Printf("%t\n", name == strings.ToLower(server.Name)) 两者

我在Go中编写了一个小程序,用于检查服务器的状态是否在按主机名列出的服务器列表中。我有一个函数,一旦从http.GET类型服务器中检索并存储了一个服务器类型,它就可以对该服务器类型进行迭代

我可以在下面注销,并查看这两个选项的计算结果是否正确:

// fmt.Printf("Server: %s - Status: %s\n", server.Name, status)
// fmt.Printf("%t\n", name == strings.ToLower(server.Name))
两者都有预期的结果,但当我运行程序时,if语句中的fmt.Printf调用不会打印到控制台

    func getServerStatus(name string) {
      servers := getAllServers()
      for _, server := range servers {
        status := boolToStatusString(server.Status)
        // fmt.Printf("Server: %s - Status: %s\n", server.Name, status)
        // fmt.Printf("%t\n", name == strings.ToLower(server.Name))
        if server.Name == strings.ToLower(name) {
          fmt.Printf("%s is %s", name, status)
        }
      }
    }
我曾尝试将此函数作为goroutine运行,使用类型为string的通道来存储结果并在该函数外部调用Printf,但每当我运行main.go时,它都会执行,并且不打印任何内容


已解决:将两者都作为字符串进行求值。if语句中的ToLower解决了问题。

结果表明,求值不正确,因为我没有使用字符串。ToLower在两者上都使用,导致语句始终为false,因为在执行之前或执行时未对数据进行清理


要归功于@mkopriva

您的程序是否要等到go例程完成?您能否发布如何调用函数-getServerStatus?例如,此程序不等待go例程,因此您什么也看不到:我为此尝试了goroutine,但结果是一样的。它不应该要求AFAIK并发执行,因为http.Get在调用之前就完成了。不要随意切换ToLower转换