附加不适用于定义为结构类型切片的命名类型

需要重新审视,因为我做的某件事在这里出错了。我尝试将状态附加到切片,但不起作用


我也尝试使用取消引用


type ServerStatuses []ServerStatus

statuses := new(ServerStatuses)


status := &ServerStatus{

    time:      time,

    available: available,

    url:       url,

}


statuses = append(statuses, *status)

append在这种情况下将不起作用,尽管状态是一个切片。


牛魔王的故事
浏览 98回答 2
2回答

胡说叔叔

这与命名类型无关。这是因为statusesis a *ServerStatuses,它是指向 slice 的指针,而不是切片。您只能附加到切片,而不能附加到指针。请记住,它new返回一个指向给定类型的指针。如果替换new(ServerStatuses)为ServerStatuses{},它可以工作:https ://play.golang.org/p/OYdTbLoVifD

POPMUISE

在Go中,new内置函数返回指定类型的指针。因此,new(ServerStatuses)给你一个ServerStatuses类型为 (&nbsp;*ServerStatuses) 的指针。而且您还使用了附加语句。但append()仅附加到slice.&nbsp;status您正在尝试将type 的 var的指向值附加SeverStatus到statusestype 的var&nbsp;*ServerStatuses。这就是为什么事情没有按照你的预期进行。如果我们模拟您针对 var 的相应类型使用的语句:statuses&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;append(&nbsp;&nbsp;statuses,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) *ServerStatuses&nbsp;&nbsp;&nbsp;<--&nbsp;&nbsp;&nbsp;append(&nbsp;&nbsp;*ServerStatuses,&nbsp;&nbsp;ServerStatus&nbsp;&nbsp;)因此,您必须将statusesvar 声明为slice类型。例如,statuses&nbsp;:=&nbsp;make(ServerStatuses,&nbsp;0)请参阅示例https://play.golang.org/p/RXETzrxSVqm
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go