我正在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解决了问题。
答案 0 :(得分:1)
原因是评估不正确,因为我没有使用strings.ToLower()
导致语句始终为false,因为数据未在手头或执行时被清理。
归功于@mkopriva