douqie1852 2013-03-15 01:20
浏览 31
已采纳

如何使用struct替代地图?

I read "An introduction to programming in GO" by Caleb Doxsey. In chapter 6 he had the following example:

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"])
    }
}

He commented the example that "although maps are often used like this, in chapter 9 we will see a better way to store structured information." Chapter 9 is about Structs and Interfaces.

What does a better way to store structured information with structs and interfaces look like for the example above?

Thank you in advance.

  • 写回答

2条回答 默认 最新

  • dongmeng4742 2013-03-15 01:46
    关注
    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条)

报告相同问题?