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

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

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

Go
牛魔王的故事 2023-07-10 14:44:32
需要重新审视,因为我做的某件事在这里出错了。我尝试将状态附加到切片,但不起作用我也尝试使用取消引用type ServerStatuses []ServerStatusstatuses := new(ServerStatuses)status := &ServerStatus{    time:      time,    available: available,    url:       url,}statuses = append(statuses, *status)append在这种情况下将不起作用,尽管状态是一个切片。
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

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


查看完整回答
反对 回复 2023-07-10
?
POPMUISE

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

在Go中,new内置函数返回指定类型的指针。因此,new(ServerStatuses)给你一个ServerStatuses类型为 ( *ServerStatuses) 的指针。

而且您还使用了附加语句。但append()仅附加到slicestatus您正在尝试将type 的 var的指向值附加SeverStatusstatusestype 的var *ServerStatuses。这就是为什么事情没有按照你的预期进行。如果我们模拟您针对 var 的相应类型使用的语句:

statuses           =    append(  statuses,         *status       )
*ServerStatuses   <--   append(  *ServerStatuses,  ServerStatus  )

因此,您必须将statusesvar 声明为slice类型。例如,

statuses := make(ServerStatuses, 0)

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


查看完整回答
反对 回复 2023-07-10
  • 2 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

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