美文网首页
go 第四篇(map、结构体)

go 第四篇(map、结构体)

作者: 原来哥哥是万家灯火 | 来源:发表于2022-05-29 18:30 被阅读0次

map类型
map就是一个哈希表,通常就用来做数据容器,key和value可以是其他类型,不一定非要是字符串

var ss = map[string]int{
  "z": 1,
  "b": 2,
 }

map也是引用类型

func main() {
    var m0 = map[string]int{
        "z": 1,
    }
    m1 := m0
    m1["z"] = 2
    fmt.Println(m0)
    fmt.Println(m1)
}

有个小坑的地方,就是遍历map的时候,顺序是随记的(伪随机)

func main() {
    var m = map[string]string{
        "1": "一",
        "2": "二",
        "3": "三",
        "4": "四",
        "5": "五",
    }

    for key, val := range m {
        fmt.Println(key, val)
    }
}

struct
结构体 比较接近js里的class

func main() {
    zs := Human{
        Age: 19,
        Name: "zhangsan",
    }
}

type Human struct {
    Age  int
    Name string
}

struct不是引用类型

func main() {
    zs := Human{
        Age: 19,
        Name: "zhangsan",
    }
    lisi := zs
    lisi.Name = "lisi"
    fmt.Println(zs)
}

type Human struct {
    Age  int
    Name string
}

上面可以挂载一堆方法

func (h Human) SayHi() {}

h叫做方法SayHi的接收器,Human是接收器的类型

接收器还可以是指针类型

func (h *Human) SayHi() {}

指针类型会造成数据的更改

func main() {
    zs := Human{
        Name: "张三",
    }
    zs.ChangeNameAndSayHi1("李四")
    fmt.Println("使用非指针类型的接收器", zs.Name)
    zs.ChangeNameAndSayHi2("李四")
    fmt.Println("使用指针类型的接收器", zs.Name)
}

type Human struct {
        Age int
    Name string
}

func (h Human) ChangeNameAndSayHi1(name string) {
    h.Name = name
    fmt.Println("🍎", h.Name)
}

func (h *Human) ChangeNameAndSayHi2(name string) {
    h.Name = name
    fmt.Println("🍌", h.Name)
 // h的类型是一个指针,照理说它是没有方法和属性的,这里h.Name相当于(*h).Name
}

相关文章

网友评论

      本文标题:go 第四篇(map、结构体)

      本文链接:https://www.haomeiwen.com/subject/vendprtx.html