Golang中map的初始化及使用

// 先声明map
var m1 map[string]string
// 再使用make函数创建一个非nil的map,nil map不能赋值
m1 = make(map[string]string)
// 最后给已声明的map赋值
m1["a"] = "aa"
m1["b"] = "bb"

// 直接创建
m2 := make(map[string]string)
// 然后赋值
m2["a"] = "aa"
m2["b"] = "bb"

// 初始化 + 赋值一体化
m3 := map[string]string{
	"a": "aa",
	"b": "bb",
}

// ==========================================
// 查找键值是否存在
if v, ok := m1["a"]; ok {
	fmt.Println(v)
} else {
	fmt.Println("Key Not Found")
}

// 遍历map
for k, v := range m1 {
	fmt.Println(k, v)
}
package main

import (
    "fmt"
    "user"
)

type Person struct {
    ID      string
    Name    string
    Address string
}

func main() {
    userDB := make(map[string](*user.User)) //注意写法

    //初始化,注意对数组的初始化

    u := new(user.User)
    u.SetAge(12)
    u.SetName("张三")
    u.SetSex("男")
    u.SetPhone("15902783102")

    userDB["u1"] = u

    v, ok := userDB["u1"] //获取map值  key为'u1'
    if !ok {
        fmt.Println(" 没有找到信息")
        return
    }

    //打印出全部值 和各个分值
    fmt.Println(v.String())
    fmt.Printf("userDB[u1] = \n {name=%v \n age=%v \n sex=%v \n phone=%v \n}", v.GetName(), v.GetAge(), v.GetSex(), v.GetPhone())

    personDB := make(map[string]Person)
    var person = Person{"12346", "Xym", "bbb"}
    personDB["p1"] = person
    p, ok := personDB["p1"] //获取map值  key为'u1'
    if !ok {
        fmt.Println(" 没有找到信息")
        return
    }

    //打印出全部值 和各个分值
    fmt.Printf(" \n personDB[p1] = \n {ID=%v \n Name=%v \n address=%v \n}", p.ID, p.Name, p.Address)

    // 先声明map
    //var a map[string]string
    //a["b"] = "c" //这样会报错的,要先初始化内存
    //a = make(map[string]string)
    //a["b"] = "c" //这样才不会错

    var m1 map[string]string
    // 再使用make函数创建一个非nil的map,nil map不能赋值
    m1 = make(map[string]string)
    // 最后给已声明的map赋值
    m1["a"] = "aa"
    m1["b"] = "bb"
    m1["c"] = "cc"
    m1["d"] = "dd"
    fmt.Println("\n", m1) //输出元素的顺序是随机的,go语言中map是无序的

    // 直接创建
    m2 := make(map[string]string)
    m2["a"] = "aa"
    m2["b"] = "bb"
    fmt.Println("\n", m2)

    // 初始化 + 赋值一体化 注意最后一个元素后面也需要带上逗号的
    m3 := map[string]string{
        "a":  "aa",
        "b":  "bb",
        "c":  "cc",
        "xx": "xx",
        "d":  "dd", //注意最后一个元素后面也需要带上逗号的
    }
    fmt.Println("\n", m3)

    //删除一个key对应的元素 map的删除操作
    fmt.Println("删除之前", m3)
    delete(m3, "a")
    fmt.Println("删除之后", m3)

    //map的遍历
    fmt.Println("\n 遍历输出map")
    for k, v := range m3 {
        fmt.Printf("key=%v,val=%v \n", k, v) //无序的输出
    }
}
package user

import (
    "strconv"
)

type User struct {
    name  string
    age   int
    sex   string
    phone string
}

func (s *User) SetName(name string) {
    s.name = name
}

func (s *User) GetName() string {
    return s.name
}

func (s *User) SetAge(age int) {
    s.age = age
}

func (s *User) GetAge() int {
    return s.age
}

func (s *User) String() string {
    return "name is " + s.name + ",age is " + strconv.Itoa(s.age) + " ,sex=" + s.sex + " ,phone=" + s.phone
}

func (s *User) SetSex(sex string) {
    s.sex = sex
}

func (s *User) GetSex() string {
    return s.sex
}

func (s *User) SetPhone(phone string) {
    s.phone = phone
}

func (s *User) GetPhone() string {
    return s.phone
}

func (User) Print() string {
    return "print"
}

参考:

https://www.yuque.com/docs/share/5943f6d8-f739-4b86-83b0-b95852f3301d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值