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

时间:2019-08-02 14:37:41

标签: go append slice

需要崭新的外观,因为我做某件事,在这里我弄错了。 我试图将状态附加到切片中,这是行不通的

我也尝试使用取消引用

type ServerStatuses []ServerStatus
statuses := new(ServerStatuses)

status := &ServerStatus{
    time:      time,
    available: available,
    url:       url,
}

statuses = append(statuses, *status)

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

在Go中,new内置函数返回指定类型的指针。因此,new(ServerStatuses)为您提供了ServerStatuses的指针,键入(*ServerStatuses)。

您还使用了一条append语句。但是append()仅附加到slice后面。您试图将类型{{1}的status var的指向值附加到类型SeverStatus的var statuses上。这就是为什么它没有按您期望的那样进行。如果我们针对相应的var类型模拟您使用的语句:

*ServerStatuses

因此,您必须将statuses = append( statuses, *status ) *ServerStatuses <-- append( *ServerStatuses, ServerStatus ) var声明为statuses类型。例如,

slice

请参见示例https://play.golang.org/p/RXETzrxSVqm