1. 变量定义和使用
- 多种变量赋值方式
赋值可以进行类型推断
func TestFibList(t *testing.T) {
//var a int = 1
//var b int = 1
//var (
// a int = 1
// b = 1
//)
// 类型推断
a := 1
b := 1
fmt.Print(a)
for i := 0; i < 5; i++ {
fmt.Print(" ", b)
tmp := a
a = b
b = tmp + a
}
fmt.Println()
}
在一个赋值语句中对多个变量进行赋值
func TestExchange(t *testing.T) {
a := 1
b := 2
//tmp := a
//a = b
//b = tmp
a, b = b, a
t.Log(a, b)
}
2. 常量定义与使用
快速设置连续值 ```go const ( Monday = 1 + iota Tuesday Wednesday )
const ( Readable = 1 << iota Writable Executable )
func TestConstantTry(t *testing.T) { t.Log(Monday, Tuesday, Wednesday) t.Log(Readable, Writable, Executable) a := 7 t.Log(a&Readable, a&Writable, a&Executable) }
- iota的使用
- iota只能在常量的表达式中使用
- 每次 const 出现时,都会让 iota 初始化为0
```go
const a = iota // a=0
const (
b = iota //b=0
c //c=1 相当于c=iota
)
- 可跳过的值(下划线) ```go //如果两个const的赋值语句的表达式是一样的,那么可以省略后一个赋值表达式。 type AudioOutput int
const ( OutMute AudioOutput = iota // 0 OutMono // 1 OutStereo // 2 OutSurround // 5 )
- iota 在下一行增长,而不是立即取得它的引用
```go
const (
Apple, Banana = iota + 1, iota + 2
Cherimoya, Durian // = iota + 1, iota + 2
Elderberry, Fig //= iota + 1, iota + 2
)
// 输出
// Apple: 1
// Banana: 2
// Cherimoya: 2
// Durian: 3
// Elderberry: 3
// Fig: 4
3. 基本数据类型
bool | 布尔值 |
---|---|
string | 字符串 |
int,int8,int16,int32,int64 | 整数,不带位数表示根据运行平台确定 |
uint,uint8,uint16,uint32,uint64 | 无符号整数,不带位数表示根据运行平台确定 |
byte | alias for uint8 |
rune | alias for int32 |
float32,float64 | 浮点数 |
complex64,complex128 | 复数 |
类型的预定义值
- math.MaxInt64
- math.MaxFloat64
- math.MaxUint32
4. 指针类型
5. 字符串
6. 算数运算符
7. 比较运算符
8. 比较数组
相同维数切含相同个数的数组可以用比较符直接比较,每个元素都相等,数组则相等。
数组的比较不是引用比较而是值比较。
9. 逻辑运算
10. 位运算
11. 循环结构
12. 条件语句
13. swith条件
func TestSwitchMultiCase(t *testing.T) {
for i := 0; i < 5; i++ {
switch i {
case 0, 2:
t.Log("Even")
case 1, 3:
t.Log("Old")
default:
t.Log("it is not 0-3")
}
switch {
case i%2 == 0:
t.Log("Even")
case i%2 == 1:
t.Log("Old")
default:
t.Log("impossible")
}
}
}
14. 总结
可以看出与java相比而言,Go提供了更少了语法选择,但却不失灵活性。