fmt.Printf不执行内部循环

时间:2018-01-22 15:39:06

标签: go

我正在Go中编写一个小程序,通过hostname检查服务器的状态是否已启动(服务器列表中)。我有一个函数,一旦它们被检索并从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运行channel类型string来存储结果,并在此函数外调用Printf但我随时{ {1}}它只是执行并且不打印任何内容。

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

1 个答案:

答案 0 :(得分:1)

原因是评估不正确,因为我没有使用strings.ToLower()导致语句始终为false,因为数据未在手头或执行时被清理。

归功于@mkopriva