1. 变量定义和使用

  • 多种变量赋值方式
  • 赋值可以进行类型推断

    1. func TestFibList(t *testing.T) {
    2. //var a int = 1
    3. //var b int = 1
    4. //var (
    5. // a int = 1
    6. // b = 1
    7. //)
    8. // 类型推断
    9. a := 1
    10. b := 1
    11. fmt.Print(a)
    12. for i := 0; i < 5; i++ {
    13. fmt.Print(" ", b)
    14. tmp := a
    15. a = b
    16. b = tmp + a
    17. }
    18. fmt.Println()
    19. }
  • 在一个赋值语句中对多个变量进行赋值

    1. func TestExchange(t *testing.T) {
    2. a := 1
    3. b := 2
    4. //tmp := a
    5. //a = b
    6. //b = tmp
    7. a, b = b, a
    8. t.Log(a, b)
    9. }

    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) }

  1. - iota的使用
  2. - iota只能在常量的表达式中使用
  3. - 每次 const 出现时,都会让 iota 初始化为0
  4. ```go
  5. const a = iota // a=0
  6. const (
  7. b = iota //b=0
  8. c //c=1 相当于c=iota
  9. )
  • 可跳过的值(下划线) ```go //如果两个const的赋值语句的表达式是一样的,那么可以省略后一个赋值表达式。 type AudioOutput int

const ( OutMute AudioOutput = iota // 0 OutMono // 1 OutStereo // 2 OutSurround // 5 )

  1. - iota 在下一行增长,而不是立即取得它的引用
  2. ```go
  3. const (
  4. Apple, Banana = iota + 1, iota + 2
  5. Cherimoya, Durian // = iota + 1, iota + 2
  6. Elderberry, Fig //= iota + 1, iota + 2
  7. )
  8. // 输出
  9. // Apple: 1
  10. // Banana: 2
  11. // Cherimoya: 2
  12. // Durian: 3
  13. // Elderberry: 3
  14. // 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

Go语言不支持任何隐私类型转换,包括原类型与别名类型。
image.png
image.png

4. 指针类型

Go语言不支持指针运算
image.png
image.png

5. 字符串

字符串是值类型,默认值是””而不是null
image.png

6. 算数运算符

image.png
比其他语言简洁,尤其是自增自减。

7. 比较运算符

image.png

8. 比较数组

相同维数切含相同个数的数组可以用比较符直接比较,每个元素都相等,数组则相等。
数组的比较不是引用比较而是值比较
image.png

9. 逻辑运算

image.png

10. 位运算

image.png
image.png
image.png

11. 循环结构

Go语言的循环结构仅支持for。
image.png

12. 条件语句

image.png

13. swith条件

image.png
image.png

  1. func TestSwitchMultiCase(t *testing.T) {
  2. for i := 0; i < 5; i++ {
  3. switch i {
  4. case 0, 2:
  5. t.Log("Even")
  6. case 1, 3:
  7. t.Log("Old")
  8. default:
  9. t.Log("it is not 0-3")
  10. }
  11. switch {
  12. case i%2 == 0:
  13. t.Log("Even")
  14. case i%2 == 1:
  15. t.Log("Old")
  16. default:
  17. t.Log("impossible")
  18. }
  19. }
  20. }

14. 总结

可以看出与java相比而言,Go提供了更少了语法选择,但却不失灵活性。