基本语法
常用库
切片
go 通过切片模拟栈和队列
栈
|
|
队列
|
|
注意:默认 s=s[0 : len(s)]
,取下限不取上限,前闭后开,数学表示为:[ )
字典
基本用法
|
|
注意
- map 键需要可比较,不能为 slice、map、function
- map 值都有默认值,可以直接操作默认值,如:
m[age]++
,值由 0 变为 1 - 比较两个 map 需要遍历其中的 kv 是否相同,因为有默认值关系,所以需要检查 val 和 ok 两个值
标准库
sort
|
|
math
|
|
copy
|
|
slices
|
|
rand
|
|
strings
|
|
fmt
|
|
常用技巧
类型转换
|
|
刷题注意点
- leetcode 中,全局变量不要当做返回值,否则刷题检查器会报错
- 全局变量需要在函数体中重新初始化,不然变量值会在下一用例中继续使用
处理输入
fmt包
|
|
- 功能:扫描从标准输入读取的文本,将连续的空格分隔值存储到连续的参数中。换行符算作空格
- 输入:保存输入的变量,注意要传入地址
- 返回值:
- 成功扫描的项目数
- 错误信息
|
|
- 功能:扫描从标准输入读取的文本,将连续的空格分隔值存储到由格式确定的连续参数中。输入中的换行符必须与格式中的换行符匹配。有一个例外是
%c
总是扫描输入中的下一个字符,即使它是一个空格、制表符或换行符 - 输入:保存输入的变量,注意要传入地址
- 返回值:
- 成功扫描的项目数
- 错误信息
- 注意:
- 遇到换行符会报错
expected newline
- fmt 库不能读取带空格的字符串,要想读取含空格的字符串,只能用
bufio
库中的一行一行读取的方法ReadLine()
- 遇到换行符会报错
|
|
- 功能:
Scanln
类似于Scan
,但在换行符处停止扫描,并且在最后一项之后必须有一个换行符或EOF - 输入:保存输入的变量,注意要传入地址
- 返回值:
- 成功扫描的项目数
- 错误信息
- 注意:
- 遇到换行符会报错
expected newLine
- fmt 库不能读取带空格的字符串,要想读取含空格的字符串,只能用
bufio
库中的一行一行读取的方法ReadLine()
- 遇到换行符会报错
总结:
-
scanf:按照给定的格式依次读取数据(包括非法数据),不能换行输入(如果要换行需要在前面加一个scanln吸收掉回车符,就像c语言中的getchar)
-
scan:比scanf高级,依次读取数据,遇到回车会忽略,可以换行输入(如果要先用了scan输入,再用scanf输入的话,需要在中间加一个scanln)
-
scanln:类似scan,但是遇到换行(回车)立马结束输入,如果要换行输入必须用多个scanln
读取一行已知长度的数组
|
|
读取多行已知长度的数组
|
|
读取一行未知长度的数组, 利用 scanf 不接收换行符的性质
|
|
bufio包
读取多行未知长度的数组, 利用 bufio
|
|
总结
- 已知长度用
scan
方便,不用写格式 - 单行未知长度用
scanf
,到换行符自动结束 - 多行未知长度用
bufio.NewReader
创建一个Reader
实例,指定输入源为标准输入os.Stdin
,再用Reader
实列的ReadString
方法指定\n
截止,按字符串读取一行后,若遇到EOF
则跳出输入循环,若没遇到,则用strings.Fields
自动将字符串按空格分割为多个子字符串,最后用strconv.Atoi
逐个将子字符串转为数字