Go语言的基础语法 | 青训营;

69 阅读3分钟

这篇文章接着介绍go语言的基本语法

一.结构体

(1)定义结构体:结构体由关键字、结构体类型名称和具体成员构成

屏幕截图 2023-07-28 150658.png

(2)结构体初始化:

 variable_name := structure_variable_type {value1, value2...valuen}
 variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}
 举例:s2 := Student{2, "Sanji", 'f', 20, "EastSea"}
 
 

(3)访问结构体成员:如果要访问结构体成员,需要使用点号 . 操作符,格式为 结构体.成员名

(4)结构体指针:

         定义结构体指针变量:var struct_pointer *Books
         结构体指针变量可以存放结构体变量地址:struct_pointer = &Book1
         结构体指针访问结构体成员,使用 "." 操作符:struct_pointer.title

补充:有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性。显然单独定义以上变量比较繁琐,数据不便于管理。

2.png

二.切片

由于go数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。

(1)定义切片

    可以声明一个未指定大小的数组来定义切片:var identifier []type
    切片不需要说明长度

(2)创建切片

    var slice1 []type = make([]type, len,capacity)    
    也可以简写为 slice1 := make([]type, len,capacity) 
    capacity为可选参数
    

(3)切片初始化

   s :=[] int {1,2,3 }      //直接初始化切片,[] 表示是切片类型,{1,2,3} 初始化值依次是 1,2,3,其 cap=len=3
   s := arr[:] 
   s := arr[startIndex:endIndex] //将 arr 中从下标 startIndex 到 endIndex-1 下的元素创建为一个新的切片
   s := arr[startIndex:] 
   s := arr[:endIndex] 
   s :=make([]int,len,cap) 

(4) len() 和 cap() 函数

len() 方法获取长度
cap() 方法计算容量,即可以测量切片最长可以达到多少

(5)空(nil)切片:一个切片在未初始化之前默认为 nil,长度为 0

(6)切片截取:可以通过设置下限及上限来设置截取切片  [lower-bound:upper-bound]

(7) append() 和 copy() 函数

 append()函数:向切片添加元素
 copy() 函数:如果想增加切片的容量,我们必须**创建一个新的更大的切片**并把**原分片的内容都拷贝过来**
 

三.范围Range

Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。

for key, value := range oldMap {
    newMap[key] = value
}


for key := range oldMap //只读取 key
for _, value := range oldMap //只读取 value

四.Map集合

(1)定义Map:可以使用内建函数 make 也可以使用 map 关键字来定义 Map:

/* 声明变量,默认 map 是 nil */
var map_variable map[key_data_type]value_data_type
/* 使用 make 函数 */
map_variable = make(map[key_data_type]value_data_type)


 map_variable : = make(map[key_data_type]value_data_type)

(2)使用Map

 获取元素:v1 := m["apple"]  // 获取键值对
 修改元素:m["apple"] = 5 // 修改键值对
 获取 Map 的长度:len := len(m)
 遍历 Map:
    for k, v := range m {
        fmt.Printf("key=%s, value=%d\n", k, v)
    }
删除元素:delete(m, "banana")// 删除键值对,参数为 map 和其对应的 key


注意:
    Map 是无序的,遍历 Map 时返回的键值对的顺序是不确定的。
    在获取 Map 的值时,如果键不存在,返回该类型的零值
    Map 是引用类型,因此对 Map 的修改会影响到所有引用它的变量

以上是对go语言基础语法的总结,我大致了解了go语言的语法结构,之后还需要进行代码练习来巩固这些知识。