2013-03-15 60 views
3

我讀過Caleb Doxsey的「GO編程入門」。在第6章他有下面的例子:「雖然地圖是經常使用這樣的,在第九章中,我們將看到一個更好的方式來存儲結構化信息」如何使用結構作爲映射的替代方法?

package main 

import "fmt" 

func main() { 
    elements := map[string]map[string]string{ 
     "H": map[string]string{ 
      "name": "Hydrogen", 
      "state": "gas", 
     }, 
     "He": map[string]string{ 
      "name": "Helium", 
      "state": "gas", 
     }, 
     "Li": map[string]string{ 
      "name": "Lithium", 
      "state": "solid", 
     }, 
     "Be": map[string]string{ 
      "name": "Beryllium", 
      "state": "solid", 
     }, 
     "B": map[string]string{ 
      "name": "Boron", 
      "state": "solid", 
     }, 
     "C": map[string]string{ 
      "name": "Carbon", 
      "state": "solid", 
     }, 
     "N": map[string]string{ 
      "name": "Nitrogen", 
      "state": "gas", 
     }, 
     "O": map[string]string{ 
      "name": "Oxygen", 
      "state": "gas", 
     }, 
     "F": map[string]string{ 
      "name": "Fluorine", 
      "state": "gas", 
     }, 
     "Ne": map[string]string{ 
      "name": "Neon", 
      "state": "gas", 
     }, 
    } 

    if el, ok := elements["Li"]; ok { 
     fmt.Println(el["name"], el["state"]) 
    } 
} 

他評論的例子第9章是關於結構和接口。

如何使用結構和接口存儲結構化信息的更好方法是什麼?

預先感謝您。

回答

15
type element struct { 
    name string 
    state string 
} 

func main() { 
    elements := map[string]element{ 
     "H": {"Hydrogen", "gas"}, 
     "He": {"Helium", "gas"}, 
     "Li": {"Lithium", "solid"}, 
     "Be": {"Beryllium", "solid"}, 
     "B": {"Boron", "solid"}, 
     "C": {"Carbon", "solid"}, 
     "N": {"Nitrogen", "gas"}, 
     "O": {"Oxygen", "gas"}, 
     "F": {"Fluorine", "gas"}, 
     "Ne": {"Neon", "gas"}, 
    } 
    if el, ok := elements["Li"]; ok { 
     fmt.Println(el.name, el.state) 
    } 
} 

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

+1

只是爲了指出明顯,'elements'是私人的。在這個例子中,這可能是所有需要的。 – 2013-03-16 16:35:56

+0

這也是Go如何在文字內部進行類型推斷的一個很好的例子。 – Caleb 2013-03-23 04:23:31

4

例如,

package main 

import "fmt" 

type Element struct { 
    Symbol, Name, State string 
} 

func main() { 

    elements := []Element{ 
     {"H", "Hydrogen", "gas"}, 
     {"He", "Helium", "gas"}, 
     {"Li", "Lithium", "solid"}, 
    } 
    symbols := make(map[string]*Element) 
    for i := range elements { 
     symbols[elements[i].Symbol] = &elements[i] 
    } 
    if el, ok := symbols["Li"]; ok { 
     fmt.Println(el.Symbol, el.Name, el.State) 
    } 
} 

輸出:

Li Lithium solid 
相關問題