go学习笔记
The master has failed more times than the beginner has tried.
ch1
开发环境构建
GOPATH
在1.8版本前必须设置这个环境变量
1.8版本后(含1.8)如果没有设置使用默认值
在Unix上默认为
$HOME/go
,在Windows上默认为%USERPROFILE%/go
在Mac上GOPATH可以通过修改
~/.bash_profile
来设置
基本程序结构
package main // 包,表明代码所在的模块(包)
import "fmt" // 引入代码依赖
// 功能实现
func main() {
fmt.Println("Hello World!")
}
应用程序入口
- 必须是main包:
package main
- 必须是main方法:
func main()
- 目录名不一定是
main
- 文件名不一定是
main.go
退出返回值
与其他主要编程语言的差异
- Go中main函数不支持任何返回值
- 通过
os.Exit
来返回状态
获取命令行参数
与其他主要编程语言的差异
main函数不支持传入参数
func main
(arg []string)在程序中直接通过
os.Args
获取命令行参数
ch2
编写测试程序
- 源码文件以_test结尾:
xxx_text.go
- 测试方法名以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
类型转化
与其他主要编程语言的差异
- Go语言不允许隐式类型转换
- 别名和原有类型也不能进行隐式类型转换
类型的预定义值
math.MaxInt64
math.MaxFloat64
math.MaxUint32
指针类型
与其他主要编程语言的差异
- 不支持指针运算
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