我想使用library(golang walk declarative),它期望我传递一个指针变量,然后library将用一个示例填充它。
为了便于记录,我试图创建一个函数,它将返回引用并进一步传递它,但在原始函数中,我没有返回对正确对象的引用。
我试图简化这个问题,但我仍然无法得到正确的答案,我如何在不修改setup函数的情况下,在test_ref结构中将value world填充到map中。
工作代码
var t *walk.LineEdit
...
LineEdit{
AssignTo: &t,
},
我的尝试
LineEdit{
AssignTo: GetLineEdit("msg"),
},
...
func GetLineEdit(name string) **walk.LineEdit {
测试代码
type test_ref struct {
v map[string]*string
}
func (t *test_ref) init() {
t.v = map[string]*string{}
}
func (t *test_ref) return_ref() **string {
s := "hello"
t.v["a"] = &s
p := t.v["a"]
return &p
}
type test_setup struct {
s **string
}
//dont modify this function
func setup(t test_setup) {
w := "world"
*(t.s) = &w
}
func main() {
tr := test_ref{}
tr.init()
s := tr.return_ref()
setup(test_setup{
s: s,
})
fmt.Println(*tr.v["a"])//logging hello
}
如果我对setup函数做一个小的修改,我可以让它工作,但是因为我不想更新walk库,我想知道是否有一种方法可以在不接触setup函数的情况下完成它。
func setup(t test_setup) {
w := "world"
**(t.s) = w
}
1条答案
按热度按时间hkmswyz61#
这里:
返回的是变量
p
的地址。我想这就是你想做的:
上面将返回
s
的地址,这是存储在Map中的内容。然后又道:这将把字符串的值设置为“world”。
你可以把这个程度更进一步,做: