保留字
关键字
在go的代码中会使用到以下25个关键字:
|
|
|
|
|
break |
default |
func |
interface |
select |
case |
defer |
go |
map |
struct |
chan |
else |
goto |
package |
switch |
const |
fallthrough |
if |
range |
type |
continue |
for |
import |
return |
var |
预定义标识符
除了上述的关键字以外,go语言还有37个预定义标识符:
- 常量
- 类型
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64
float32 float64 complex64 complex128
uintptr
bool
byte
rune
string
error
- 函数
make
len
cap
new
append
copy
close
delete
complex
real
imag
panic
recover
符号
最后,go语言也会使用一些符号:
Package语法
package关键字用作标识一个文件属于哪一个包。package关键字应在文件(除注释以外)的最头部进行定义。
Import语法
import关键字用作导入其他包,放在package关键字下面进行导入。导入包的顺序为:1. 标准库 2. 第三包 3. 项目内其他包或当前包的子包,每种包类型之间以空行分隔。
1 2 3
| package main
import "fmt"
|
1 2 3 4 5 6
| package main
import ( "fmt" "os" )
|
变量
变量在使用前需要先申明,声明了类型后,就约定了这个变量只能赋该类型的值。在go语言中,如果申明了一个变量,这个变量必须被使用,否则编译器会报错。
变量声明
如果只声明单个变量,以下有多种方式进行申明
1 2 3 4 5 6 7 8
| var variableName1 string var variableName2
var variableName3 string = "test" var variableName4 = "test" variableName5 := "test"
|
如果想要申明多个相同类型的变量,可以在一行中进行申明,如果类型不同,可以使用()进行声明。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| var variableName1, variableName2, variableName3 string
var variableName4, variableName5, variableName6 = "test1", "test2", "test3" variableName7, variableName8, variableName9 := "test1", "test2", "test3"
var ( variableName10 string variableName11 int variableName12 bool )
var ( variableName13 = "test" variableName14 = 123 variableName15 = true )
|
创建指针变量
一般变量分为两种,一种是普通变量,存放的是数据本身。一种是指针变量,存放的是数据的内存地址。
- 通过
new()新建一个指针变量,返回的是一个指针变量
1 2 3 4 5
| func new(Type) *Type
ptr := new(string) *ptr = "test"
|
1 2 3
| variableName := "test" ptr := &variableName
|
创建特殊类型变量
slice,map和channel是go中的引用变量类型,他们的创建和初始化一般使用的make,特别是channel类型只能使用make进行创建。而slice和map可以通过简单的方式创建。make创建出来的变量,是普通变量,而不是指针变量。本章只简单介绍创建这些特别的变量,之后会进行更详细的分析。
1 2
| func make(t Type, size ...IntegerType) Type
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| type slice struct { array unsafe.Pointer len int cap int }
slice1 := make([]int, 5)
slice2 := make([]int, 5, 10)
slice3 := []int{1,2,3,4,5}
var slice4 = []int slice4 = append(s, i)
|
1 2 3 4 5 6 7 8 9 10
|
map1 := make(map[string] int)
map2 := make(map[string] int, 100)
map3 := map[string] int { "test1" : 1 "test2" : 2 }
|
1 2 3 4 5
|
chan1 := make(chan int)
chan2 := make(chan int, 10)
|
匿名变量
匿名变量一般被用作接收函数返回的不必要的参数,当一个函数返回多个变量时,接收这些变量就变得很麻烦,并且如果不需要用这个变量,申明后还可能会造成编译器报错。这个时候我们可以使用匿名变量(_)来代替不用的变量。
1 2 3 4 5 6 7
| func test() (int, int) return 1, 2 } func main(){ v1, _ = test() _, v2 = test() }
|
匿名变量的优点:
- 不分配内存,不占用内存空间
- 不需要你为命名无用的变量而烦恼
- 多次声明不影响
常量
常量时一个简单值的标识符,在程序运行时,不会被修改的量。常量中的数据类型只可以是布尔型,数字型和字符串型。
1 2
| const identifier [type] = value
|
1 2 3 4 5 6 7 8 9 10 11
| const TEST_VARIABLE1 = 10 const TEST_VARIABLE2 = true const TEST_VARIABLE3 = "test"
const ( TEST_VARIABLE4 = 10 TEST_VARIABLE5 = true TEST_VARIABLE6 = "test" )
|
1 2 3 4 5 6 7 8 9 10 11
| const ( Sunday = iota Monday Tuesday test = "test" Wednesday = iota _ Thursday = iota )
const Friday = iota
|
在定义常量组时,如果不定义初始值,则表示使用上行的表达式
1 2 3 4 5
| const ( VARIABLE1 = 1 VARIABLE2 VARIABLE3 )
|