【发布时间】:2021-08-15 17:28:30
【问题描述】:
我被困在 Go 中似乎/应该很容易的事情上。
我写了一个小的 go playground 来更容易解释我的问题 => https://play.golang.org/p/Sm0SzrvEZS_o
package main
import (
"github.com/sirupsen/logrus"
)
type toto struct {
name string
}
func transform (data ...interface{}) {
logrus.Info("data before ", data)
data[0] = "tutu"
logrus.Info("data after ", data)
}
func main() {
var titi toto
logrus.Info("titi before ", titi) // -> empty
transform(&titi)
logrus.Info("titi after ", titi) // -> should have a name but don't
}
目标是将结构传递给函数,在其中进行修改并继续在调用函数中使用它。可悲的是,参数在子函数内部被修改,但没有移动到调用者中。
我是这门语言的初学者,也许我只是在某个地方遗漏了一些东西......非常感谢您的帮助
【问题讨论】:
-
A minimal reproducible example 应该包含在问题本身中。您不是在函数中修改
titi,而是在修改data。您没有为name字段分配任何内容,因此无法更改name。 -
这就是重点,我不明白如何修改titi。也许我表达错误了……
-
将代码添加到问题中。对不起
-
我将从 Tour of Go 开始介绍语言基础知识(然后是 Effective Go 和规范)。您必须为该字段分配一些内容才能对其进行修改:play.golang.org/p/FrVBPPlllC_9
-
完成,但不明白这一点。非常感谢您的工作示例^^
标签: go pointers syntax arguments