初学 GO,怎么判断一个变量是否未初始化/是否为空

2020-05-21 16:22:45 +08:00
 5bb864e1fc775087

应该怎么写

package main

import "net/http"

func main() {
	var httpClient http.Client

	if httpClient == nil { // 这一行报错 cannot convert nil to type http.Client

	}

}
7927 次点击
所在节点    Go 编程语言
21 条回复
iamverylovely
2020-05-21 16:33:44 +08:00
到菜鸟教程去好吧
caryqy
2020-05-21 16:42:41 +08:00
silenzio
2020-05-21 16:42:57 +08:00
看 go 语言之旅
科学的地址 https://go-tour-zh.appspot.com/
不科学的地址 http://tour.studygolang.com/welcome/1?tdsourcetag=s_pctim_aiomsg

看完这个看 Effective Go
5bb864e1fc775087
2020-05-21 16:43:09 +08:00
@iamverylovely #1 提问前我就看了菜鸟教程, 菜鸟教程告诉我"没有初始化就为零值"。
我试了下面 4 种都报错
if httpClient == 0
if httpClient == “”
if httpClient == false
if httpClient == nil
当然菜鸟教程的文章我没全看
按我之前学的其他语言的习惯 if httpClient == nil 应该是可行的,结果不行,差别好大
baiyi
2020-05-21 16:45:36 +08:00
var httpClient *http.Client
5bb864e1fc775087
2020-05-21 16:46:07 +08:00
@caryqy #2 可以, 解决了我的问题
rtp
2020-05-21 16:46:20 +08:00
呃,这个东西是个结构体,所以才不能和 nil 比较啊,如果你定义个指针就没这个问题了……
Trim21
2020-05-21 16:47:28 +08:00
httpClient 是指(*http.Client )的话零值是 nil
不是的话零值是 httpClient{}
Trim21
2020-05-21 16:47:41 +08:00
@Trim21 #8 http.Client{}
Hanggi
2020-05-21 16:48:17 +08:00
zero value 了解下
forgottencoast
2020-05-21 17:05:30 +08:00
@rtp 理解了你说的话,但是不理解 httpClient 竟然是个结构体。
zarte
2020-05-21 17:10:19 +08:00
@forgottencoast var a int if a == nil 这个就会保错了。
tikazyq
2020-05-21 17:10:37 +08:00
实践一下吧,没有必要这么写,这样判空的意义几乎为零,当然报错
pmispig
2020-05-21 17:15:24 +08:00
golang 没办法直接判断一个结构是否初始化,只能通过通过结构的某个属性值来判断,比如 int 默认是 0,如果
httpClient 有个属性 id int,
判断 httpClient.Id = 0 ,有可能是没初始化,当然也不是 100%,得看实际应用
5bb864e1fc775087
2020-05-21 17:20:19 +08:00
@tikazyq #13 这只是我简化成这样
原本 httpClient 是一个全局变量
然后想在某个函数里 判断 httpClient 是否为空, 为空则给 httpClient 赋值, 然后把 httpClient 返回出来
jworg
2020-05-21 17:45:02 +08:00
https://www.v2ex.com/t/661739 我甚至怀疑是不是同一个人的问题
asAnotherJack
2020-05-21 18:11:58 +08:00
改成指针类型
darksword21
2020-05-21 18:16:39 +08:00
有 zero value,不用太担心初始化方面
5bb864e1fc775087
2020-05-21 19:20:29 +08:00
@jworg #16 不是
iRiven
2020-05-21 20:16:50 +08:00
切片 字典 指针 接口 这些类型可能为空,其他都不可能为空!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/674053

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX