猿问

在Go中,如何在结构中带有指向数组的指针?

我希望这段代码能正常工作:


package main


type Item struct {

  Key string

  Value string

}


type Blah struct {

  Values []Item

}


func main() {

  var list = [...]Item {

    Item {

      Key : "Hello1",

      Value : "World1",

    },

    Item {

      Key : "Hello1",

      Value : "World1",

    },

  }


  _ = Blah {

    Values : &list,

  }

}

我认为这将是正确的方法。值是一个切片,列表是一个数组。&list应该是可分配给Item []的切片,对不对?


...但是相反,它出现以下错误消息:


cannot use &list (type *[2]Item) as type []Item in assignment

在C语言中,您将编写:


struct Item {

  char *key;

  char *value;

};


struct Blah {

   struct Item *values;

};

您如何在Go中做到这一点?


慕的地8271018
浏览 183回答 3
3回答

江户川乱折腾

切片不仅是指向数组的指针,还具有包含其长度和容量的内部表示形式。如果您想从中分得一杯slice,list可以这样做:_ = Blah {    Values : list[:],}

慕娘9325324

幸运的是,Go并不像在OP中看起来那么冗长。这有效:package maintype Item struct {        Key, Value string}type Blah struct {        Values []Item}func main() {        list := []Item{                {"Hello1", "World1"},                {"Hello2", "World2"},        }        _ = Blah{list[:]}}PS:让我建议不要在Go中编写C。

繁花如伊

当您刚开始使用Go时,请完全忽略数组,而仅使用slice是我的建议。数组很少使用,这会给Go初学者带来很多麻烦。如果有切片,则不需要指向它的指针,因为它是引用类型。这是您的带有切片但没有指针的示例,这更惯用了。package maintype Item struct {    Key   string    Value string}type Blah struct {    Values []Item}func main() {    var list = []Item{        Item{            Key:   "Hello1",            Value: "World1",        },        Item{            Key:   "Hello1",            Value: "World1",        },    }    _ = Blah{        Values: list,    }}
随时随地看视频慕课网APP

相关分类

Go
我要回答