为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕的地8271018 2021-05-05 17:38:03
我希望这段代码能正常工作: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,  }}我认为这将是正确的方法。值是一个切片,列表是一个数组。&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中做到这一点?
查看完整描述

3 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

切片不仅是指向数组的指针,还具有包含其长度和容量的内部表示形式。


如果您想从中分得一杯slice,list可以这样做:


_ = Blah {

    Values : list[:],

}


查看完整回答
反对 回复 2021-05-31
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

幸运的是,Go并不像在OP中看起来那么冗长。这有效:


package main


type Item struct {

        Key, Value string

}


type Blah struct {

        Values []Item

}


func main() {

        list := []Item{

                {"Hello1", "World1"},

                {"Hello2", "World2"},

        }


        _ = Blah{list[:]}

}


PS:让我建议不要在Go中编写C。


查看完整回答
反对 回复 2021-05-31
?
繁花如伊

TA贡献2012条经验 获得超12个赞

当您刚开始使用Go时,请完全忽略数组,而仅使用slice是我的建议。数组很少使用,这会给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,

    }

}


查看完整回答
反对 回复 2021-05-31
  • 3 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信