代码之家  ›  专栏  ›  技术社区  ›  Saqib Ali

在Go中,用(nil)参数调用结构意味着什么?

go
  •  0
  • Saqib Ali  · 技术社区  · 4 年前

    我是个新手。 我有下面的围棋代码(在操场上) here ).

    我很困惑,因为我不明白第17行发生了什么。 myStruct 用一个nil参数,好像它是一个函数? 这是什么意思 []*

    我想比较一下 a b 直接的,但他们是不同类型的。

     1:     package main
     2: 
     3:     import (
     4:         "fmt"
     5:         "google.golang.org/protobuf/runtime/protoimpl"
     6:     )
     7: 
     8:     type myStruct struct {
     9:         e   protoimpl.MessageState
    10:     }
    11: 
    12:     func myFunc() (*myStruct) {
    13:         return new(myStruct)
    14:     }
    15: 
    16:     func main() {
    17:         a := []*myStruct(nil)
    18:         fmt.Println("a = ", a)
    19:         b := myFunc()
    20:         fmt.Println("b = ", b)
    21:     }
    

    输出:

    a =  []
    b =  &{{{} [] [] <nil>}}
    
    2 回复  |  直到 4 年前
        1
  •  1
  •   Henry    4 年前

    这是类型转换。 nil 已转换为类型 []*myStruct ,指向 myStruct .

        2
  •  2
  •   Zombo tliff    4 年前

    var 相反,不必担心必须进行任何转换:

    package main
    import "fmt"
    
    type date struct { year int }
    
    func main() {
       {
          d := []*date(nil)
          fmt.Println(d) // []
       }
       {
          var d []*date
          fmt.Println(d) // []
       }
    }