一.map
1.1 什么是map
与C++中的map容器为同一种数据结构,map 是一种用于存储键值对的集合型数据结构,也可以称为哈希表。
1.2 定义方法
- 方法一:
mapName := map[KeyType]ValueType{...},其中,mapName是map的变量名,KeyType是键的类型,ValueType是值的类型。例如map,fruits := map[string]string{ "apple": "red", "banana": "yellow", } - 方法二:使用make关键字
mapName := make(map[KeyType]ValueType),例如,如果要创建一个存储字符串到整数的映射ages := make(map[string]int)。
1.3 对map的操作
- 添加元素:
map[key] = value,例如ages["Alice"] = 28 - 删除元素:
delete(map, key),例如delete(ages, "Alice") - 获取元素:
value := map[key],例如age := ages["Alice"] - 检查元素是否存在:可以使用多重赋值,例如
age, ok := ages["Alice"],ok表示元素是否存在的布尔值 - 遍历元素:可以直接使用
fmt.Println(mapName)来遍历,但是,由于map是无序的,遍历map的顺序是不确定的。比如实践代码
package main
import "fmt"
func main() {
a := map[string]int{
"apple": 1,
"orange": 3,
"banana": 2,
}
fmt.Println(a)
}`
遍历出来的结果是
二.range关键词
range是用在循环语句的遍历之中的,可以遍历多种数据结构,比如数组,哈希表等。
2.1 用于数组
比如语句for i, val := range arr{...},则表示遍历数组arr,其中在语句里面val表示在i下标的数组值,也就是arr[i]。
2.2用于map
比如语句for key, val := range mapName{...},则表示遍历map,其中在语句里面key表示键,val表示该键下的值。
三.函数(详细)
区别于C语言,Go语言的返回可以返回多个变量,比如
func divide(a, b int) (int, int) {
quotient := a / b
remainder := a % b
return quotient, remainder
}
其中描述完形参后的空格中有两个占位符表示返回两个变量,都是int类型,函数内部实现写到了返回两个变量,为quotient与remainder,则在调用这个函数时需要拿两个变量来接取函数返回的两个变量,比如q, r := divide(17, 5)输出结果为
四.指针
同C语言用法相同,但是定义方法为var ptr *int = &a或者ptr := &a,在用函数来改变主函数的某个值时就要传入指针来改变,否则因为作用域而导致不能正确修改值。
五.结构体
定义方法:type structName struct{...},比如要实现一个Person结构体:
type Person struct {
FirstName string
LastName string
Age int
}
表示一个Person结构里面有字符串类型的Firstname、Lastname,int类型的Age,创建实例可以写成person := Person{ FirstName: "John", LastName: "Doe", Age: 30},也可以var person1 Person person1.FirstName = "John" person1.LastName = "Doe" person1.Age = 30
注意,结构体字段的访问权限是根据首字母的大小写来决定的,大写字母开头的字段是导出的,可以在包外访问,小写字母开头的字段是私有的,只能在包内部访问,有点类似C++的公有与私有访问权限。