Go语言的基础语法(下,含实践)|青训营

86 阅读3分钟

一.map

1.1 什么是map

与C++中的map容器为同一种数据结构,map 是一种用于存储键值对的集合型数据结构,也可以称为哈希表。

1.2 定义方法

  • 方法一:mapName := map[KeyType]ValueType{...},其中,mapNamemap 的变量名,KeyType 是键的类型,ValueType 是值的类型。例如mapfruits := 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)
}`

遍历出来的结果是 faa6b01bc7a165a0bb1f3e8ad77e9ef.png

二.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类型,函数内部实现写到了返回两个变量,为quotientremainder,则在调用这个函数时需要拿两个变量来接取函数返回的两个变量,比如q, r := divide(17, 5)输出结果为 0aed7f789fe774766a135a39f621228.png

四.指针

同C语言用法相同,但是定义方法为var ptr *int = &a或者ptr := &a,在用函数来改变主函数的某个值时就要传入指针来改变,否则因为作用域而导致不能正确修改值。

五.结构体

定义方法:type structName struct{...},比如要实现一个Person结构体:

type Person struct { 
    FirstName string 
    LastName string 
    Age int 
}

表示一个Person结构里面有字符串类型的FirstnameLastnameint类型的Age,创建实例可以写成person := Person{ FirstName: "John", LastName: "Doe", Age: 30},也可以var person1 Person person1.FirstName = "John" person1.LastName = "Doe" person1.Age = 30
注意,结构体字段的访问权限是根据首字母的大小写来决定的,大写字母开头的字段是导出的,可以在包外访问,小写字母开头的字段是私有的,只能在包内部访问,有点类似C++的公有与私有访问权限。