go学习笔记

The master has failed more times than the beginner has tried.

ch1

开发环境构建

GOPATH

  1. 在1.8版本前必须设置这个环境变量

  2. 1.8版本后(含1.8)如果没有设置使用默认值

    在Unix上默认为$HOME/go,在Windows上默认为%USERPROFILE%/go

    在Mac上GOPATH可以通过修改~/.bash_profile来设置

基本程序结构

package main // 包,表明代码所在的模块(包)
import "fmt" // 引入代码依赖

// 功能实现
func main() {
  fmt.Println("Hello World!")
}

应用程序入口

  1. 必须是main包:package main
  2. 必须是main方法:func main()
  3. 目录名不一定是main
  4. 文件名不一定是main.go

退出返回值

与其他主要编程语言的差异

  • Go中main函数不支持任何返回值
  • 通过os.Exit来返回状态

获取命令行参数

与其他主要编程语言的差异

  • main函数不支持传入参数

    func main(arg []string)

  • 在程序中直接通过os.Args获取命令行参数

ch2

编写测试程序

  1. 源码文件以_test结尾:xxx_text.go
  2. 测试方法名以Test开头:func TestXXX(t *testing.T) {...}

实现Fibonacci数列

1, 1, 2, 3, 5, 8, 13, ….

变量赋值

与其他主要编程语言的差异

  • 赋值可以进行自动类型推断
  • 在一个赋值语句中可以对多个变量进行同时赋值

常量定义

与其他主要编程语言的差异

快速设置连续值

const (                  const (
  Monday = iota + 1        Open = 1 << iota // 0001
  Tuesday                  Close            // 0010
  Wednesday                Pending          // 0100
  Thursday               )
  Friday
  Saturday
  Sunday
)

ch3

基本数据类型

bool
string
int		int8	int16		int32		int64
uint	uint8	uint16	uint32	uint64	uintptr
byte // alias for uint8
rune // alias for int32, represents a Unicode code point
float32	float64
complex64 complex128

类型转化

与其他主要编程语言的差异

  1. Go语言不允许隐式类型转换
  2. 别名和原有类型也不能进行隐式类型转换

类型的预定义值

  1. math.MaxInt64
  2. math.MaxFloat64
  3. math.MaxUint32

指针类型

与其他主要编程语言的差异

  1. 不支持指针运算
  2. string是值类型,其默认的初始化值为空字符串,而不是nil

ch4

算术运算符

运算符 描述 实例
+ 相加 A + B 输出结果 30
- 相减 A - B 输出结果 -10
* 相乘 A * B 输出结果 200
/ 相除 B / A 输出结果 2
% 求余 B % A 输出结果0
++ 自增 A++ 输出结果 11
自减 A– 输出结果 9

Go 语言没有前置的 ++, --, (++a)

比较运算符

运算符 描述 实例
== 检查两个值是否相等,如果相等返回 True 否则返回 False。 (A == B) 为 False
!= 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 (A != B) 为True
> 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 (A > B) 为False
< 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 (A < B) 为True
>= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 (A >= B) 为False
<= 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 (A <= B) 为True

用 == 比较数组

  • 相同维数且含有相同个数元素的数组才可以比较
  • 每个元素都相同的才相等

逻辑运算符

运算符 描述 实例
&& 逻辑 AND 运算符。如果两边的操作数都是 True,则条件 True,否则为 False。 (A && B) 为 False
|| 逻辑 OR 运算符。如果两边的操作数有一个 True,则条件 True,否则为 False。 (A || B) 为 True
! 逻辑 NOT 运算符。如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 !(A && B) 为 True

位运算符

运算符 描述 实例
& 按位与运算符”&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。 (A & B) 结果为 12,二进制为 0000 1100
| 按位或运算符”|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。 (A | B) 结果为 61,二进制为 0011 1101
^ 按位异或运算符”^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (A ^ B) 结果为 49,二进制为 0011 0001
<< 左移运算符”<<”是双目运算符。左移n位就是乘以2的n次方。其功能把”<<”左边的运算数的各二进位全部左移若干位,由”<<”右边的数指定移动的位数,高位丢弃,低位补 A << 2 结果为 240,二进制为 1111 0000
>> 右移运算符”>>”是双目运算符。右移n位就是除以2的n次方。其功能把”>>”左边的运算数的各二进位全部右移若干位,”>>”右边的数指定移动的位数 A >> 2 结果为 15,二进制为 0000 1111

位运算符

与其他主要编程语言的差异

&^按位置零

1 &^ 0 -- 1
1 &^ 1 -- 0
0 &^ 1 -- 0
0 &^ 0 -- 0