一、输出语句

使用 fmt.Println 输出:

  1. 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
print println real recover string true uint uint8 uintptr

五、运算符

  • 算术运算符+ - * / % ++ --
  • 关系运算符== != > < >= <=
  • 逻辑运算符&& || !
  • 位运算符& | ^ << >>
  • 赋值运算符= += -= *= /= %= <<= >>= &= ^= |=

引用:

  • & 返回变量存储地址。示例:&a 将给出变量的实际地址。

指针:

  • * 指针变量。示例:*a 是一个指针变量

运算符优先级

优先级 运算符
5 * / % << >> & &^
4 + - | ^
3 == != < <= > >=
2 &&
1 ||