![](/img/trans.png)
[英]json: cannot unmarshal number into Go struct field .Amount of type string
[英]Ineffective Assignment to Field when trying to update a Struct in Go
我收到 linting 错误
ineffective assignment to field Player.Level (SA4005)go-staticcheck
当我尝试使用结构方法LevelUp
更新结构的值Player.Level
:
func main() {
player := Player{
Name: "Tom",
Level: 0,
}
player.LevelUp()
fmt.Printf("Player level %d\n", player.Level)
}
type Player struct {
Name string
Level int
}
func (p Player) LevelUp() {
p.Level += 1 // linting error here
}
p.Level
在调用p.LevelUp()
后也保持0
。 调用更新此方法附加到的结构的字段值的方法的正确方法是什么?
Output:
Player level 0
输入 function / 方法时复制包括接收器在内的每个参数。 返回时,对副本所做的更改将丢失。 这就是你得到警告的原因:你修改了一个你从不使用的字段:你没有在赋值后的方法中使用,而且你不可能在其他任何地方使用它,因为从方法返回后,效果任务丢失。
如果您需要保留更改,则必须使用指针接收器 ( p *Player
) 并修改指向的 object ( p.Level++
将执行此操作)。
func (p *Player) LevelUp() {
p.Level++
}
这将是 output(在Go Playground上尝试):
Player level 1
见相关:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.