Overview

  • Go 是编译型语言
  • Go 原生支持 UTF-8,可以处理各国语言
  • main 包用来定义一个独立运行的程序
  • 空标识符:_(下划线)
  • 格式化代码工具
    • gofmt
    • goimports

命令行参数

  • os.Args 是一个字符串 slice, slice 索引是半开区间的

变量

  • 接口和引用类型(slice、指针、map、通道、函数)的零值为 nil
  • new(T) 返回地址,即指针
  • 所有的变量都有地址,即指针

基本数据

  • rune 类型是 int32 类型的同义词,代表一个 Unicode
  • byte 类型是 int8 类型的同义词
  • 就 Go 而言,取模余数的正负号总是与被除数一致
  • Go 的 range 循环也适用于字符串,按 UTF-8 隐式解码
  • 整数转换成字符串
    • fmt.Sprintf(“%d”, x)
    • strconv.Itoa(x)
    • strconv.FormatInt(int64(x), 2)
  • 字符串转化成整数
    • x, err := strconv.Atoi("123")
    • y, err := strconv.ParseInt("123", 10, 64)

复合数据类型

  • slice 无法做比较,必须自己写函数进行比较
  • slice = append(slice, element)
  • copy 函数用来为两个拥有相同类型元素的 slice 复制元素

函数

  • Go 语言没有默认参数值的概念也不能指定实参值
  • defer 语句经常使用于成对的操作,比如打开和关闭,连接和断开,加锁和解锁
  • Go 语言封装的单元是包而不是类型
  • Go 语言函数可以返回多个值,用逗号进行分隔
  • 与许多其他语言不太, Go 语言通过使用普通的值而非异常来报告错误
    • fmt.Errorf("%v", errorMessage)
  • 延迟函数:defer 语句经常使用于成对的操作,比如打开和关闭,连接和断开,加锁和解锁

方法

  • 与函数类似,在函数名前多了一个类型参数,且圆括号是必须的

接口

  • Go 的接口是隐事实现的
  • 空接口类型:interface{}

语句

  1. 递增语句 i++ 是语句,不是表达式,且只支持后缀,不支持 --i
  2. for 是 Go 里面的唯一循环语句