目录
golang语法
range关键字
介绍
用于遍历数组(array)、切片(slice)、映射(map)、通道(channel)和字符串(string)
- 返回索引和值或键和值
使用
i,num :=range nums
- 可以将它运用到for循环中,用于遍历元素
原理
底层实现 依赖于不同数据结构的内部表示 ,其本质是遍历 底层的数据结构
- Go 语言编译器会将range语法转换为普通的for循环,并使用不同的方式访问数据
数组中:
映射中:
函数
介绍
函数可以有零个或多个参数,并且可以返回零个或多个结果
- 变量类型为后置写法(c/c++是前置写法)
- 多个返回值之间用逗号分隔 (一般为返回结果+错误信息)
定义
func 函数名(变量名 变量类型, ...)返回值类型 {}
特性
允许简写参数类型,如果多个参数具有相同类型,可以省略重复的类型声明
支持变长参数列表
- 变参参数放在参数列表的最后,使用 ...表示
支持命名返回值
- 可以在函数声明时为返回值指定名字
- 使用命名返回值时,可以省略return语句中的返回值
结构体
介绍
与面向对象语言中的类类似,结构体为数据提供了一个封装的方式
结构体使用type关键字来定义
- type 结构体名 struct{
- 变量名 类型
- 变量名 类型
- }
初始化
字面量初始化:
- a := 结构体名{变量名 : value,...}
或者也可以隐藏变量名:
- 只不过这样就得对应顺序进行初始化
也可以只初始化一部分变量,然后再手动赋值:
- 对象名.变量名 = value
可以作为参数,分为对象/指针的区别,和c类似
结构体指针
结构体方法
类似类的成员函数
func (结构体对象名 结构体名) 函数名(变量名 变量类型, ...) 返回值类型 {}
- 在外部可以使用结构体对象名.函数名 来调用方法
方法接收者
可以是值类型 或指针类型 ,这决定了方法如何访问和操作结构体数据
- 方法的接收者是结构体的值类型 ,那么该方法操作的是结构体的副本 (方法内的操作不会改变原始结构体的值,任何修改只会作用于副本)
- 方法的接收者是结构体的指针类型 ,那么该方法操作的是原始结构体的地址 (方法对结构体字段的修改将直接影响原始数据,因为方法通过指针访问的是结构体的内存地址)