环境配置
在 PowerShell 中执行 go env -w GOPROXY=https://goproxy.cn 以使用国内源. 利用 VSCode 开发, 直接安装对应的拓展并执行即可.
编程中
需要 import 时直接输入对应的函数即可, 会自动导入. 保存时会清空未使用的变量.
语法
变量
const声明常量.var声明变量.- 声明时用
=指定值. - 用
${varName}:=${expression}的方式也可以创建变量. - 创建变量和常量时可以指定类型, 格式:
${keyword} ${varName} ${type} = ${expression} - 字符串和其他类型的加法可以自动转换.
- 类型转换语法同 Python.
int变量默认为0.
选择
- 和 C++ 相同, 去掉括号.
- 不能直接使用
int等类型作为布尔表达式. if后可以接一个普通语句, 在分号后再写要判断的布尔表达式.
循环
只有 for 循环, 也不需要括号.
- 可以使用
break,continue来控制循环进行. - 死循环: 不接任何语句.
- 三句式同 C++ 的
for循环. - 一个布尔表达式则为
while循环. - 对可迭代对象:
for index[, elem]: range array|slice,for key[, value] := range map
switch 语句
- 不需要括号和
break. - 多个条件用逗号分割.
- 可以使用类似 Kotlin 中
when语句的写法, 代替分支操作.
数组
- 类型形如
[2][3]int. len函数获取长度.
切片
len函数获取长度.- 声明方法:
make([]${elemType}, ${length})或者[]${elemType}{${elem}...} - 追加方法:
${varName} = append(${varName}, ${elem}...) - 复制方法:
copy(${to}, ${from}) - 切片方法同 Python. 注意: 不能使用负数下标.
字典/映射(无序)
len函数获取长度.- 声明方法:
make(map[keyType]valueType)或者map[keyType]valueType{${keys}:${values}...} - 获取不存在的 key 时不会报错, 检验方法:
value, ok := m[key],ok为true则该 key 存在.
函数
func fName(kw type) returnType {}.returnType可以为元组.
指针
- 声明方法:
*type - 使用:
&取地址,*取值.
结构体
type NAME struct {}- 变量默认为
public - 可以使用指针和方法
- 方法声明:
func (name [*]structType) ...使用指针才能对结构体修改.
错误处理
一般使用单独的返回值来处理错误, 类型为 error, 无错误直接返回 nil, 否则使用 errors.New 函数来创建一个错误.
字符串操作
需要导入 strings.
- 转小写
string ToLower(string) - 转大写
string ToUpper(string) - 包含
bool Contains(string, string) - 计数
int Count(string, string) - 前缀
bool HasPrefix(string, string) - 后缀
bool HasSuffix(string, string) - 下标
int Index(string, string) - 连接
string Join([]string, string@sep) - 切分
[]string Split(string, string@sep) - 重复
string Repeat(string, int) - 替换
String Replace(string, string@from, string@to, int@lim若最后一个参数小于 则无限替换.
注意 len(string) 中一个汉字可以对应多个"字符".
字符串格式化
使用 %v 格式化任意类型变量, 使用 %+v 得到详细输出, %#v 得到更详细输出.
JSON
json.Marshal(struct)获得序列化的buffer, 转化为string后可以输出.json.Unmarshal(buffer, *struct)反序列化, 将数据输入到变量中.- 在结构体中声明变量时可以为其指定 JSON 下的名称, 在类型标识符后加
json:"name"即可.
时间
time.Now()获取现在时间.time.Date(int@year, int@month, int@day, int@hour, int@minute, int@second, int@ms, time.UTC)生成指定时间.- 两个时间可以相减获取一个时间段. 语法:
t1.Sub(t2) - 格式化时间: 使用特定日期: 2006-01-02 15:04:05
time.Parse(string@format, string@time)解析时间.t.Unix()获取时间戳.
数字与字符串
使用 strconv 来操作.
ParseInt(string, int@r, int)按指定的进制转换, 若进制为0或者不写则自动推导. 最后一个参数代表返回值的精度大小 (二进制位).Atoi快速 10 进制字符串转数字.
运行参数
os.Args显示运行命令的参数.os.Getenv(key)和os.Setenv(key, value)来获取/写入环境变量.exec.Command(args...)调用终端命令. 返回值可以通过~.CombinedOutput()获取运行结果, 类型为 buffer.