gpt4 book ai didi

go - 结构映射不保存键/值

转载 作者:数据小太阳 更新时间:2023-10-29 03:34:47 25 4
gpt4 key购买 nike

package main

import "fmt"
import "reflect"

type someMap struct {
X map[string]string
}

func (s *someMap) mapSetter(someKey string, someValue string) {
s.X = make(map[string]string)
s.X[someKey] = someValue
}

func (s someMap) mapGetter() map[string]string {
return s.X
}

func (s someMap) mapKeys() []reflect.Value {
return reflect.ValueOf(s.X).MapKeys()
}

func retrievedList(x map[string]string) {
fmt.Println("I got %v", x)
}

func main() {
v := new(someMap)
v.mapSetter("item1", "value1")
v.mapSetter("item2", "value2")
returnedMap := v.mapGetter()
fmt.Println(returnedMap)
fmt.Println(reflect.TypeOf(returnedMap))
retrievedList(returnedMap)
fmt.Println(v.mapKeys())
keys := v.mapKeys()
fmt.Println(keys[0])
}

如您所见,我正在为我的结构“someMap”设置两个键/值,但是当看起来键被覆盖而不是保存时,这是为什么?

map[item2:value2]
map[string]string
I got %v map[item2:value2]
[item2]
item2

我一直关注这里的 map 示例 https://blog.golang.org/go-maps-in-action

据我所知,这不是很多,我是 golang 的新手,这应该有点类似于 python。

最佳答案

原因是在 mapSetter 中,每次调用 make(map[string]string) 都会用新实例覆盖 s.X .从那里删除该行并在 main 中初始化 v.X:

v.X = make(map[string]string)

或者创建一个函数来创建新的 someMap 实例并初始化它的 X:

func New() *someMap {
s := new(someMap)
s.X = make(map[string]string)
return s
}

参见 here

关于go - 结构映射不保存键/值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47047490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com