【Golang 计划】05 Go 基础五-map 和 struct

206 阅读2分钟

「这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战

map

定义

map是一种无序的基于key-value的数据结构,是引用类型,必须初始化后才可以使用。

mapS := make(map[keyT]ValueT, [cap]) 

keyT 是键的类型,ValueT是键对应值的类型。需要使用 make() 函数进行分配内存,默认初始值是 nil。其中cap表示map的容量,该参数非必填,但是我们应该在初始化map的时候就为其指定一个合适的容量。

使用

// 方式1
subjectMap := make(map[string]int, 8)
subjectMap["张三"] = 90
subjectMap["小明"] = 100// 方式2
userInfo := map[string]string{
        "username": "pprof.cn",
        "password": "123456",
}
​
// 判断map中键是否存在
value, ok := subjectMap[“小红”]
if ok {
  ...
} else {
  ...
}
​
// 使用for range遍历map,遍历 map时的元素顺序与添加键值对的顺序无关
 for k, v := range subjectMap {
        fmt.Println(k, v)
}
//使用delete()内建函数从map中删除一组键值对
  subjectMap(scoreMap, "小明") //将小明:100从map中删除,重新遍历后值就少了

struct 结构体

定义

在 Go语言中没有面向对象的概念,没有类的说法,但是Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。

   type 类型名 struct {
        字段名 字段类型
        字段名 字段类型
        …
    }
  • 使用关键字 type 和 struct 来定义结构体。
  • 在一个包里面只允许一个结构体名称,不能出现重复名称的结构体。
  • 在结构体内,字段名也是唯一,相当于是类里面的属性。
  • 定义了结构体是没有占用内存,只有被实例化后才会分配内存
  • 结构体也是一种类型,所以可以使用 var 声明结构体类型
type User struct {
  name string
  age number
}
​
var user User  // 通过 var 定义了名为 user 的变量,
user.name = '元宇宙'  // 通过使用 . 进行访问结构体的字段
user.age = 18

使用关键字 var 创建了user 变量,其类型是一个User结构体的实力。声明了user 变量,user 对应的值也被初始化了,默认值是零值,值得是结构体里面字段里面值都为默认值,若字段是数值类型来说,零值是 0;是字符串来说,零值是空字符串;对布尔类型,零值是 false。

匿名结构体

结构体也是一种类型,所以其可以当作某结构体的内置结构体使用,如下所示:

// User结构体中包含了identify字段,其类型是一个匿名结构体
type User struct {
   name string
   age int32
   identify struct{
      role string,
      position string
    }
}
​
// 直接初始化一个变量,类型是匿名结构体
var role struct {
  name string
  roleType string
}

内嵌结构体 像是一种 “继承”,Golang 利用这种方式实现继承

\