2012-12-18 58 views
5

我在Golang.org上使用Go Playground編寫了simple program前往:編輯地圖值

輸出顯然是:

second test 
first test 

是否存在編輯到位映射值的方法嗎?我知道我不能接受a.Things[key]的女主人。那麼,設置a.Things[key] = firstTest是唯一的方法嗎?也許用函數ChangeThing(key string, value string)

回答

6

您可以通過將地圖指針的值設置爲另一個結構來實現。

http://play.golang.org/p/UouwDGuVpi

package main 

import "fmt" 

type A struct { 
    Things map[string]*str 
} 

type str struct { 
    s string 
} 

func (a A) ThingWithKey(key string) *str { 
    return a.Things[key] 
} 

func main() { 
    variable := A{} 

    variable.Things = make(map[string]*str) 
    variable.Things["first"] = &str{s:"first test"} 

    firstTest := variable.ThingWithKey("first") 
    firstTest.s = "second test" 

    fmt.Println(firstTest.s) 
    fmt.Println(variable.ThingWithKey("first").s) 
} 
+0

謝謝!沒想過這個。你的建議對我很好。 – Donovan

3

您可以使用指針作爲映射值http://play.golang.org/p/BCsmhevGMX

+0

謝謝,這有幫助。 – Donovan

+0

我嘗試過,但編譯器不會讓我獲取字符串文字的地址。我看到你通過將字符串分配給一個變量,然後獲取變量的地址來解決這個問題。我想知道爲什麼我可以使用struct初始化的地址,而不是字符串初始化的地址。 – Daniel