Go语言关键字详解
var const
var
:go
中最基本的定义变量方式,有时也会用:=
来定义变量
定义变量:
1 | #var 变量名 变量类型 |
定义变量并初始化值:
1 | var 变量名 变量类型 = 变量初始值 |
同时初始化多个同类型变量
1 | var 变量名1,变量名2,变量名3 变量类型 = 变量值1,变量值2,变量值3 |
同时初始化多个类型不同的变量
1 | var ( |
省略变量类型初始化
1 | var name1,name2,name3 = 'val1','val2','val3' |
const
用来声明一个常量,const
语句可以出现在任何var语句可以出现的地方,声明常量方式与var相同,但const声明的是常量,一经创建,不可赋值修改
package import
包是函数和数据的集合。用`package`关键字定义一个包,用`import`关键字引入一个包,文件名不需要和包名一直。包名的约定是使用小写字符。Go包可以由多个文件组成,但是使用相同的`package`这一行。
当函数或者变量等首字母为大写时,会被导出,可在外部直接调用
包名是导入的默认名称,可以在导入语句中指定其他名称覆盖默认名
1 | package 包名 |
map
map是Go内置的关联数据类型,在一些语言中被称为哈希或字典
创建一个空的map
1 | make(map[键类型] 值类型) |
设置键值对map赋值
1 | m['k'] = 7 |
使用name[key]
来获取一个键的值
1 | v := m['k'] |
当对一个map
调用内置的len
时,返回的时键值对数目
1 | fmt.Println('len:',len(m)) |
内置的delete
可以从一个map
中移除键值对
1 | delete(map变量,键名) |
当从一个map
中取值时,可选的第二返回值指示这个键是在这个map中。这可以用来消除键不存在和键值为0或空引起的歧义
1 | val, ok := m['k'] |
func
使用关键字func定义函数
1 | func 函数名(参数1,参数2 参数类型) 返回值类型 { |
有返回值的函数,必须有明确的终止语句,否则会应发编译错误
函数是可变参的,变参的本质是slice,只能有一个,且必须是最后一个,可变参数通过在最后一个参数的类型前添加...
进行声明
1 | func test(s string , n ...int) string { |
不定参数的传递,可以不用一个个赋值,直接传递一个数组或者切片,在参数后加上...
即可
1 | arr := []int{1,2,3,4} |
不定参数也可以支持任意类型,在上述的示例中,不定参数的类型都是一致的,如果需要参数的类型不一致,可以使用interface
进行声明, 可以看一下常用的Println
函数的定义
1 | func Println(a ...interface{}) (n int, err error) { |
Golang
函数支持多返回值,这个特性经常被用于返回一个函数的结果和错误信息
1 | func vals() (int, int) { |
一般情况,go中函数的参数传递是值传递,如果需要引用传递,在参数类型前使用*
号声明
1 | func vals(a, b *int) { |
引用传递在调用时,需要在参数前加&
1 | a,b = vals(&a,&b) |
return defer
type
type是go语法里的重要且常用的关键字,其主要作用是用来定义类型
定义结构体
1 | type Person struct { |
类型等价定义,想到与类型重命名
1 | type name string |
定义接口
1 | type Person interface { |
struct
Go的结构体,是各个字段的字段类型的集合,是值类型,赋值,和传参会赋值全部内容
struct
基本用法
1 | type Person struct { |