duai4512
duai4512
2017-09-05 17:14

Golang字典

已采纳

I'm just starting out with Go, and coming from Python I'm trying to find the equivalent of a dict in Python. In Python I would do this:

d = {
    'name': 'Kramer',  # string
    'age': 25          # int
}

I first found the map type, but that only allows for one type of value (it can't handle both ints and strings. Do I really need to create a struct whenever I want to do something like this? Or is there any type I'm missing?

All tips are welcome!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • dongze5043 dongze5043 4年前

    Basically the problem is that it's hard to encounter a requirement to store values of different types in the same map instance in real code.

    In your particular case, you should just use a struct type, like this:

    type person struct {
      name string
      age  int
    }
    

    Initializing them is no harder than maps thanks to so-called "literals":

    joe := person{
      name: "Doe, John",
      age:  32,
    }
    

    Accessing individual fields is no harder than with a map:

    joe["name"] // a map
    

    versus

    joe.name // a struct type
    

    All in all, please consider reading an introductory book on Go along with your attemps to solve problems with Go, as you inevitably are trying to apply your working knowledge of a dynamically-typed language to a strictly-typed one, so you're basically trying to write Python in Go, and that's counter-productive.

    I'd recomment starting with The Go Programming Language.

    There are also free books on Go.

    点赞 评论 复制链接分享
  • duandu2159 duandu2159 4年前

    That's probably not the best decision, but you can use interface{} to make your map accept any types:

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        dict := map[interface{}]interface{} {
            1: "hello",
            "hey": 2,
        }
        fmt.Println(dict) // map[1:hello hey:2]
    }
    
    点赞 评论 复制链接分享