Go语言关键字详解

Go语言关键字详解

var const

vargo中最基本的定义变量方式,有时也会用:=来定义变量

定义变量:

1
2
#var 变量名  变量类型
var name string

定义变量并初始化值:

1
2
var 变量名 变量类型 = 变量初始值
var name string = "value"

同时初始化多个同类型变量

1
2
var 变量名1,变量名2,变量名3 变量类型  = 变量值1,变量值2,变量值3
var name1,name2,name3 string = 'val1','val2','val3'

同时初始化多个类型不同的变量

1
2
3
4
5
6
7
8
9
10
11
var (
变量名1 变量类型1 = 变量值1,
变量名2 变量类型2 = 变量值2,
··· ···
变量名n 变量类型n = 变量值n
)

var (
name string = "val"
count int = 2
)

省略变量类型初始化

1
var name1,name2,name3 = 'val1','val2','val3'

const用来声明一个常量,const语句可以出现在任何var语句可以出现的地方,声明常量方式与var相同,但const声明的是常量,一经创建,不可赋值修改

package import

包是函数和数据的集合。用`package`关键字定义一个包,用`import`关键字引入一个包,文件名不需要和包名一直。包名的约定是使用小写字符。Go包可以由多个文件组成,但是使用相同的`package`这一行。

​ 当函数或者变量等首字母为大写时,会被导出,可在外部直接调用

​ 包名是导入的默认名称,可以在导入语句中指定其他名称覆盖默认名

1
2
3
4
5
package 包名
package hello

import 自定义名 原始包名
import bar 'bytes'

map

map是Go内置的关联数据类型,在一些语言中被称为哈希或字典

创建一个空的map

1
2
make(map[键类型] 值类型)
m := make(map[string] int)

设置键值对map赋值

1
m['k'] = 7

使用name[key]来获取一个键的值

1
2
v := m['k']
fmt.Println("v:",v)

当对一个map调用内置的len时,返回的时键值对数目

1
fmt.Println('len:',len(m))

内置的delete可以从一个map中移除键值对

1
2
delete(map变量,键名)
delete(m,'k')

当从一个map中取值时,可选的第二返回值指示这个键是在这个map中。这可以用来消除键不存在和键值为0或空引起的歧义

1
2
val, ok := m['k']
fmt.Println('val:',val)

func

使用关键字func定义函数

1
2
3
4
5
6
func 函数名(参数1,参数2 参数类型) 返回值类型 {
函数体
}
func test(a,b int ) int {

}

有返回值的函数,必须有明确的终止语句,否则会应发编译错误

函数是可变参的,变参的本质是slice,只能有一个,且必须是最后一个,可变参数通过在最后一个参数的类型前添加...进行声明

1
2
3
4
5
6
7
func test(s string , n ...int) string {
var x int
for _, i := range n {
x += 1
}
return fmt.Sprintf(s, x)
}

不定参数的传递,可以不用一个个赋值,直接传递一个数组或者切片,在参数后加上...即可

1
2
arr := []int{1,2,3,4}
test('1',arr...)

不定参数也可以支持任意类型,在上述的示例中,不定参数的类型都是一致的,如果需要参数的类型不一致,可以使用interface进行声明, 可以看一下常用的Println函数的定义

1
2
3
func Println(a ...interface{}) (n int, err error) {
return Fprintln(os.Stdout, a...)
}

Golang函数支持多返回值,这个特性经常被用于返回一个函数的结果和错误信息

1
2
3
func vals() (int, int) {
return 3, 7
}

一般情况,go中函数的参数传递是值传递,如果需要引用传递,在参数类型前使用*号声明

1
2
3
func vals(a, b *int) {
return b,a = a,b
}

引用传递在调用时,需要在参数前加&

1
a,b = vals(&a,&b)

return defer

type

type是go语法里的重要且常用的关键字,其主要作用是用来定义类型

定义结构体

1
2
3
type Person struct {
name string
}

类型等价定义,想到与类型重命名

1
2
3
4
5
type name string 
func main() {
var myname name = 'golang'
fmt.Println(myname)
}

定义接口

1
2
3
type Person interface {
Run()
}

struct

Go的结构体,是各个字段的字段类型的集合,是值类型,赋值,和传参会赋值全部内容

struct基本用法

1
2
3
4
5
6
7
8
9
10
11
12
13
type Person struct {
Name string
Age int
}

func main() {
p := Person{
Name: "ck",
Age: 20,
}
p.Age = 25
fmt.Println(p)
}