This wiki is built in Notion. Here are all the tips you need to contribute.
基本程序结构应用程序入口退出返回值获取命令行参数编写测试程序Printf变量赋值常量定义快速设置连续值数据类型类型转换指针类型运算符用 == 比较数组位运算符循环逻辑判断if 条件switch 条件数组和切片
- 关键字个数: 25
基本程序结构
pacgage main // 包, 表明代码所在的模块(包)
import "fmt" // 引入代码依赖
func main() {
fmt.PrintLn("Hello World!")
}
应用程序入口
- 必须是
main
包:package main
- 必须是
main
方法:func main()
- 文件名不一定是
main.go
退出返回值
- Go 中 main 函数不支持任何返回值
- 通过
os.Exit
来返回状态
获取命令行参数
- main 函数不支持传入参数
func main(
arg []string)
- 在程序中直接通过
os.Args
获取命令行参数
编写测试程序
- 源码文件以 _test 结尾: xxx_test.go
- 测试方法名以 Test 开头:
func TestXXX(t *testing.T) {}
Printf
/*
%v 输出结构体 {10 30}
%+v 输出结构体显示字段名 {one:10 tow:30}
%#v 输出结构体源代码片段 main.Point{one:10, tow:30}
%T 输出值的类型 main.Point
%t 输出格式化布尔值 true
%d`输出标准的十进制格式化 100
%b`输出标准的二进制格式化 99 对应 1100011
%c`输出定整数的对应字符 99 对应 c
%x`输出十六进制编码 99 对应 63
%f`输出十进制格式化 99 对应 63
%e`输出科学技科学记数法表示形式 123400000.0 对应 1.234000e+08
%E`输出科学技科学记数法表示形式 123400000.0 对应 1.234000e+08
%s 进行基本的字符串输出 "\"string\"" 对应 "string"
%q 源代码中那样带有双引号的输出 "\"string\"" 对应 "\"string\""
%p 输出一个指针的值 &jgt 对应 0xc00004a090
% 后面使用数字来控制输出宽度 默认结果使用右对齐并且通过空格来填充空白部分
%2.2f 指定浮点型的输出宽度 1.2 对应 1.20
%*2.2f 指定浮点型的输出宽度对齐,使用 `-` 标志 1.2 对应 *1.20
*/
变量赋值
- 赋值可以进行自动类型推断
- 在一个赋值语句中可以对多个变量进行同时赋值
常量定义
快速设置连续值
const (
Monday = iota + 1
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
)
// 快速位赋值
const (
Open = 1 << iota
Close
Pending
)
数据类型
- bool
- string
- int int8 int16 int32 int64
- uint uint8 uint16 uint32 uint64 uintptr
- byte // alias for uint8
- rune // alias for int32
- float32 float64
- complex64 complex128
类型转换
- Go 语言不允许隐式类型转换
- 别名和原有类型也不能进行隐式类型转换
指针类型
- 不支持指针运算
- string 是值类型, 默认的初始化为空字符串, 而不是 nil
运算符
- Go 语言没有前置的
++
,—
,++a
用 ==
比较数组
- 相同维数且含有相同个数元素的数组才能可以比较
- 每个元素都相同都才相等
位运算符
&^
按位置零1 &^ 0 = 1
1 &^ 1 = 0
循环
Go 语言仅支持循环关键字
for
逻辑判断
if 条件
- condition 表达式结果必须为布尔值
- 支持变量赋值
if var declaration; condition {}
switch 条件
- 条件表达式不限制为常量或整数
- 单个 case 中, 可以出现多个结果选项, 使用逗号分隔
- 与 C 语言等规则相反, Go 语言不需要用 break 来明确退出一个 case
- 可以不设定 switch 之后等条件表达式, 在此种情况下, 整个 switch 结构与多个 if else 逻辑作用相同
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("OS X")
case "linux":
fmt.Println("Linux")
default:
fmt.Println("default")
}
// 可以替代多个 if
switch {
case 0 <= Num && Num <= 3:
fmt.Printf("0-3")
case 4 <= Num && Num <= 6:
fmt.Printf("4-6")
case 7 <= Num && Num <=9:
fmt.Printf("7-9")
}