一、输出语句
使用 fmt.Println 输出:
fmt.Println("hello")
也可以使用 fmt.Printf 格式化输出:
fmt.Printf("%v %v %v %q\n", i, f, b, s)
输出而不换行使用:
fmt.Print(10)
使用 println() 和 print() 也可以打印数据。
二、变量
变量可以指定类型,也可以让编译器根据值执行判断类型,还可以同时定义多个变量:
var name string = "xiaoyu"
fmt.Println(name)
var a = 0
fmt.Println(a)
var b, c int = 1, 2
fmt.Println(b, c)
可以将变量声明放于括号之中:
var (
a string = "1"
b = 2
c int
)
println(a, b, c)
零值
零值就是变量没有做初始化时系统默认设置的值。
// 数值类型(包括complex64/128)为 0
var a int
var a int8
var a int16
var a int32
var a int64
var a float32
var a float64
var a complex64 // 0+0i
var a complex128 // 0+0i
// 字符串为 ""(空字符串)
var a string
// 布尔类型为 false
var a bool
// 以下几种类型为 nil:
var a *int
var a []int
var a map[string] int
var a chan int
var a func(string) int
var a error // error 是接口
通过 := 声明变量
可以省略 var ,使用 := 声明并为变量赋值
a := 1
fmt.Print(a)
a = 2
fmt.Print(a)
:::warning
注意::= 左侧如果没有声明新的变量,就产生编译错误
:::
同时声明多个变量:
a, b := 1, 2
println(a, b)
空白标识符
空白标识符 _ 常常被用于抛弃值,如值 5 在 _, b = 5, 7 中被抛弃。这在丢弃函数的某些返回值时非常有用。
三、常量
定义常量跟变量差不多,只是将关键字改为const
const LENGTH int = 10
iota
iota,特殊常量,可以认为是一个可以被编译器修改的常量。
iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
e //"ha" iota += 1
f = 100 //iota +=1
g //100 iota +=1
h = iota //7,恢复计数
i //8
)
fmt.Println(a,b,c,d,e,f,g,h,i) // 0 1 2 ha ha 100 100 7 8
再看一个有趣的例子:
const (
i=1<<iota // 1: 1b; 1<<0 1b(1)
j=3<<iota // 3: 11b; 3<<1: 110b(6)
k // 3<<2: 1100b(12)
l // 3<<3: 11000b(24)
)
fmt.Println(i,j,k,l) // 1 6 12 24
注:**<<n==*(2^n)**。
四、关键字
下面列举了 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 语言还有 36 个预定义标识符:
| append | bool | byte | cap | close | complex | complex64 | complex128 | uint16 |
|---|---|---|---|---|---|---|---|---|
| copy | false | float32 | float64 | imag | int | int8 | int16 | uint32 |
| int32 | int64 | iota | len | make | new | nil | panic | uint64 |
| println | real | recover | string | true | uint | uint8 | uintptr |
五、运算符
- 算术运算符:
+-*/%++-- - 关系运算符:
==!=><>=<= - 逻辑运算符:
&&||! - 位运算符:
&|^<<>> - 赋值运算符:
=+=-=*=/=%=<<=>>=&=^=|=
引用:
&返回变量存储地址。示例:&a将给出变量的实际地址。
指针:
*指针变量。示例:*a是一个指针变量
运算符优先级
| 优先级 | 运算符 |
|---|---|
| 5 | * / % << >> & &^ |
| 4 | + - | ^ |
| 3 | == != < <= > >= |
| 2 | && |
| 1 | || |
