GO语言基础(二)|青训营笔记

81 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
一、本堂课重点内容:

  • 基础语法(中)

二、详细知识点介绍:

  • 基础语法(中)
  1. map(集合)
    map 是一种无序的键值对的集合。Map使用哈希表实现,因此对其的迭代是无序的。 使用map关键字定义map:
/* 声明变量, */
var map_variable map[key_data_type]value_data_type

使用内建函数make定义map:

map_variable := make(map[key_data_type]value_data_type)

声明后默认map的默认值是nil

map的调用方式与数组和切片类似,在此不再赘述。

可以使用delete()函数删除map中的元素。

delete(map,key)
  1. range
    range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。
    迭代的格式如下:
for key, value := range Map {
    newMap[key] = value
}

其中key 和 value 可以省略。
如果只想读取 key:

for key := range Map

for key, _ := range Map

如果只想读取 value:

for _, value := range Map
  1. 函数
    函数是基本的代码块,用于执行一个任务。
    Go 语言最少有个 main() 函数。
    Go 语言函数定义格式如下:
func function_name( [parameter list] ) [return_types] {
   函数体
}

函数定义解析:

  • func:函数由func开始声明
  • function_name:函数名称,参数列表和返回值类型构成了函数签名。
  • parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
  • return_types:返回类型,函数返回一列值。return_types是该列值的数据类型。有些功能不需要返回值,这种情况下return_types不是必须的。
  • 函数体:函数定义的代码集合。
    个人认为,go的函数与C++的大体一致,只不过将返回值移到了最后面,使其可以显式地返回多个值,而这也是其与C++最大的区别。
  1. 指针
    一个指针变量指向了一个值的内存地址。
    指针声明格式如下:
var var_name *var-type

var-type为指针类型,var_name为指针变量名,*号用于指定变量是作为一个指针。
在指针类型前面加上*号(前缀)来获取指针所指向的内容。
当一个指针被定义后没有分配到任何变量时,它的值为nilnil指针也称为空指针。
一个指针变量通常缩写为ptr
类似于基础的C++指针。
12. 结构体
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
结构体定义需要使用typestruct语句。struct语句定义一个新的数据类型,结构体中有一个或多个成员。type语句设定了结构体的名称。结构体的格式如下:

type struct_variable_type struct {
   member definition
   member definition
   ...
   member definition
}

一旦定义了结构体类型,它就能用于变量的声明,语法格式如下:

variable_name := structure_variable_type {value1, value2...valuen}

variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}

没有被初始化的成员会被赋予其对应的空值。

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

结构体.成员名

结构体可以像其他数据类型一样将结构体类型作为参数传递给函数。

可以定义指向结构体的指针类似于其他指针变量,格式如下:

var struct_pointer *Books

以上定义的指针变量可以存储结构体变量的地址。查看结构体变量地址,可以将 & 符号放置于结构体变量前:

struct_pointer = &Book1

使用结构体指针访问结构体成员,使用 . 操作符

struct_pointer.title

个人认为其与C++的不同仅为其结构体指针访问结构体成员需用.,而C++需用->
13. 结构体方法
即在结构体中的函数,类似于其他语言的类函数。
示例如下:

func (u user) checkPassword(password string) bool{
    return u.password == password
}

func (u *user) resetPassword(password string) {
    u.password = password
}

若使用指针即可修改结构体。
调用时同样使用 . 操作符。
个人认为与C++完全相同。
三、引用参考: