The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
5bb864e1fc775087

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

  •  1
     
  •   5bb864e1fc775087 · May 21, 2020 · 9129 views
    This topic created in 2358 days ago, the information mentioned may be changed or developed.

    应该怎么写

    package main
    
    import "net/http"
    
    func main() {
    	var httpClient http.Client
    
    	if httpClient == nil { // 这一行报错 cannot convert nil to type http.Client
    
    	}
    
    }
    
    21 replies  •  2020-05-21 20:18:11 +08:00
    iamverylovely
    iamverylovely
    May 21, 2020
    1
    到菜鸟教程去好吧
    caryqy
    caryqy
    May 21, 2020
    2
    silenzio
    silenzio
    May 21, 2020
    3
    看 go 语言之旅
    科学的地址 https://go-tour-zh.appspot.com/
    不科学的地址 http://tour.studygolang.com/welcome/1?tdsourcetag=s_pctim_aiomsg

    看完这个看 Effective Go
    5bb864e1fc775087
    5bb864e1fc775087
    OP
    May 21, 2020
    4
    @iamverylovely #1 提问前我就看了菜鸟教程, 菜鸟教程告诉我"没有初始化就为零值"。
    我试了下面 4 种都报错
    if httpClient == 0
    if httpClient == “”
    if httpClient == false
    if httpClient == nil
    当然菜鸟教程的文章我没全看
    按我之前学的其他语言的习惯 if httpClient == nil 应该是可行的,结果不行,差别好大
    FinnBai
    FinnBai
    May 21, 2020
    5
    var httpClient *http.Client
    5bb864e1fc775087
    5bb864e1fc775087
    OP
    May 21, 2020
    6
    @caryqy #2 可以, 解决了我的问题
    rtp
    rtp
    May 21, 2020
    7
    呃,这个东西是个结构体,所以才不能和 nil 比较啊,如果你定义个指针就没这个问题了……
    Trim21
    Trim21
    May 21, 2020❤️1
    8
    httpClient 是指(*http.Client )的话零值是 nil
    不是的话零值是 httpClient{}
    Trim21
    Trim21
    May 21, 2020
    9
    @Trim21 #8 http.Client{}
    Hanggi
    Hanggi
    May 21, 2020
    10
    zero value 了解下
    forgottencoast
    forgottencoast
    May 21, 2020
    11
    @rtp 理解了你说的话,但是不理解 httpClient 竟然是个结构体。
    zarte
    zarte
    May 21, 2020
    12
    @forgottencoast var a int if a == nil 这个就会保错了。
    tikazyq
    tikazyq
    May 21, 2020
    13
    实践一下吧,没有必要这么写,这样判空的意义几乎为零,当然报错
    pmispig
    pmispig
    May 21, 2020
    14
    golang 没办法直接判断一个结构是否初始化,只能通过通过结构的某个属性值来判断,比如 int 默认是 0,如果
    httpClient 有个属性 id int,
    判断 httpClient.Id = 0 ,有可能是没初始化,当然也不是 100%,得看实际应用
    5bb864e1fc775087
    5bb864e1fc775087
    OP
    May 21, 2020
    15
    @tikazyq #13 这只是我简化成这样
    原本 httpClient 是一个全局变量
    然后想在某个函数里 判断 httpClient 是否为空, 为空则给 httpClient 赋值, 然后把 httpClient 返回出来
    jworg
    jworg
    May 21, 2020 via iPhone
    16
    https://www.v2ex.com/t/661739 我甚至怀疑是不是同一个人的问题
    asAnotherJack
    asAnotherJack
    May 21, 2020
    17
    改成指针类型
    darksword21
    darksword21
    May 21, 2020
    18
    有 zero value,不用太担心初始化方面
    5bb864e1fc775087
    5bb864e1fc775087
    OP
    May 21, 2020
    19
    @jworg #16 不是
    Erskine
    Erskine
    May 21, 2020 via Android
    20
    切片 字典 指针 接口 这些类型可能为空,其他都不可能为空!
    Erskine
    Erskine
    May 21, 2020 via Android
    21
    @iRiven 通道貌似也能为空
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1397 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 20:16 · PVG 04:16 · LAX 12:16 · JFK 15:16
    ♥ Do have faith in what you're doing.