常规语法和数据类型

基本数据类型

  1. bool
  2. //有符号整型
  3. int(取决于计算机位数) int8 int16 int32 int64
  4. //无符号整形(一般用于位运算等)
  5. uint(取决于计算机位数) uint8 uint16 uint32 uint64 uintptr(取决于计算机位数)
  6. byte // uint8 的别名
  7. rune // int32 的别名,用于表示一个 Unicode 码点(UTF-8 字符)
  8. // 浮点数
  9. float32 float64
  10. // 复数
  11. complex64 complex128

强制类型转换

  1. // 不同类型之间赋值需要显示的类型转换(不支持默认类型转换)
  2. var i int = 42
  3. var f float64 = float64(i) // 注意与C的区别:float64(i)和(float)i

短变量声明和默认类型

  1. i := 42 // int
  2. f := 3.142 // float64
  3. g := 0.867 + 0.5i // complex128

关于var和:=两种赋值方式:var定义如果没有初始化则为该类型(无论是基础类型还是结构体)的零值,如果要定义一个结构体的零值,:=将做不到。

常量

  1. //iota
  2. func main() {
  3. // iota只能配合const()一起使用,iota只有在const中才具有累加效果
  4. const (
  5. BeiJing = iota // = 0
  6. ShangHai // = 1
  7. GuangZhou // = 2
  8. )
  9. }

nil

go中的数据类型都有默认的零值,每个类型对应的零值为:

  1. bool -> false
  2. numbers -> 0
  3. string -> ""
  4. pointers -> nil
  5. slices -> nil
  6. maps -> nil
  7. channels -> nil
  8. functions -> nil
  9. interfaces -> nil

下面清一色的nil就是这些数据类型对应的零值。

nil的特点:

  1. 两个nil不可比较,因为nil没有默认类型;
  2. 不同类型的nil指针是一致的,都是指向0x0;
  3. 不同类型的nil值占用的内存大小不一致,就如不同数据类型的大小不一致;
  4. nil是且仅是Pointer、chan、func、slice、map、interface的预定义的零值,是一个标识符,并不是关键字,甚至可以自己改变nil的值(不推荐);

    转换字符(conversion character)

    一般用于格式化输出
    1. %d 十进制整数
    2. %x, %o, %b 十六进制,八进制,二进制整数。
    3. %f, %g, %e 浮点数: 3.141593 3.141592653589793 3.141593e+00
    4. %t 布尔:truefalse
    5. %c 字符(rune (Unicode码点)
    6. %s 字符串
    7. %q 带双引号的字符串"abc"或带单引号的字符'c'
    8. %v 变量的自然形式(natural format
    9. %T 变量的类型
    10. %% 字面上的百分号标志(无操作数)

    独有语法特性

    ```go // 声明多个相同类型的参数时,可省略前面的类型名 func add(x, y int) int { return x + y }

// 可实现多值返回 func adder(x, y string) (int, int) { return x+1, y+1 }

//在返回类型声明中直接命名返回值 func split(sum int) (x, y int) { x = sum * 4 / 9 y = sum - x return } ```