golang 資料型別map,slice,interface取值更新值問題
阿新 • • 發佈:2019-02-01
總結:對於interface map 只要值是可以取地址的,就可以更新屬性值以及呼叫指標接收型別的方法。slice元素也是可以取地址的。type Lamp struct { Brand string Color string } func (this *Lamp) open() { fmt.Println("open lamp,brand:", this.Brand) } type ILamp interface { open() } func main() { var lamp = Lamp{"Philips", "red"} var ilamp ILamp = lamp ilamp.open() // 編譯error var ilamp1 ILamp = &lamp ilamp1.open() // 編譯ok m := make(map[string]Lamp) m["a"] = lamp m["a"].Brand = "xiaomi" // 編譯error temp := m["a"] temp.Brand = "xiaomi" // 編譯ok m1 := make(map[string]*Lamp) m1["a"] = lamp m1["a"].Brand = "xiaomi" // 編譯ok var s []Lamp s = append(s, lamp) s[0].Brand = "xiaomi" // ok s[0].open() // ok }