Go两周入门系列-map类型

2023-10-04 14:13:10 浏览数 (1)

go语言支持map类型,map类型是一种键值(key/value)存储的哈希数据结构,读写数据都是通过key进行操作。

1.定义map类型

map类型语法:

代码语言:javascript复制
var m map[key类型]value类型

定义一个map类型变量,需要指定map的key是什么数据类型,value(值)是什么数据类型。

例子:

代码语言:javascript复制
// key是字符串类型,value是int类型
var m map[string]int

// key是字符串类型,value是string类型
var m2 map[string]string

// key是字符串类型,value是User结构体类型
var m3 map[string]User

2.初始化map

没有初始化的map变量,默认值是nil,需要通过make初始化map类型变量。

语法:

代码语言:javascript复制
make(map[key类型]value类型)

例子:

代码语言:javascript复制
// 定义一个map
var m map[string]int

// 初始化map
m = make(map[string]·1)

通过短变量声明符,可以快速定义和初始化一个map

代码语言:javascript复制
// 不需要预先定义变量m的类型,直接通过短变量声明符(:=),直接定义和初始化变量
m := make(map[string]string)

主要:map必须要先初始化才能使用。

3.读写数据

读写数据的操作方式,类似数组,通过 [] 符号引用key的值。

语法:

代码语言:javascript复制
m[key]

key是什么类型的数据,就传入什么类型的值,例如:string类型的key, 写法为m["key"], int类型的key, 写法为m[123] 。

例子:

代码语言:javascript复制
package main

import "fmt"

func main() {
    // 定义并初始化map
    m := make(map[string]int)

    // 保存一个键值对,将key = xj的值设置为100
    m["xj"] = 100

    // 读取key = xj 的值, 这里得到的值是100
    v := m["xj"]

    fmt.Println(v)
}

4.判断key是否存在

语法:

代码语言:javascript复制
elem, ok = m[key]

第一个返回值elem是key的值,第二个返回值ok表示key是否存在。

例子:

代码语言:javascript复制
package main

import "fmt"

func main() {
    // 定义并初始化map
    m := make(map[string]string)

    m["xj"] = "https://www.xj.com"
    
    v, ok := m["xj"]
        // 判断key是否存在
    if ok {
        fmt.Println("key存在, 值等于", v)
    } else {
        fmt.Print("key不存在!")
    }
}

输出:

代码语言:javascript复制
key存在, 值等于 https://www.xj.com

5.删除数据

语法:

代码语言:javascript复制
delete(m, key)

删除map中的指定key的数据

例子:

代码语言:javascript复制
package main

import "fmt"

func main() {
    // 定义并初始化map
    m := make(map[string]string)

    m["xj"] = "https://www.xj.com"
        fmt.Println(m)

        // 删除key=tizi的数据
    delete(m, "xj")
    fmt.Println(m)
}

输出:

代码语言:javascript复制
map[tizi:https://www.xj.com]
map[]

参考:https://www.tizi365.com/

Go两周入门系列

Go两周入门系列-Golang介绍

Go两周入门系列-go语言开发环境

Go两周入门系列-基本数据类型

Go两周入门系列-运算符

Go两周入门系列-指针

Go两周入门系列-流程控制语句

Go两周入门系列-函数

Go两周入门系列-数组和切片(slice)

Go两周入门系列-结构体(struct)

Go两周入门系列-Interface接口

0 人点赞