go语言语法 | 青训营笔记

100 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第1天

go语言语法

因为之前用到的比较熟悉的语言是C++,因此我主要谈谈通过这节课程我学到的go语法与C++的不同之处。

变量

go是强类型,变量都有类型,声明变量时常用方式:

  • var varname type = value:需var关键字且类型放后面
  • varname := value:会自行推到类型

字符串

go的strings包有很多常用函数:

  • contains判断是否包含另一字符串
  • count字符串计数
  • index查找字符串位置
  • join连接多字符串
  • repeat重复多个字符串
  • replace替换字符串

字符串格式化

fmt包中有很多字符串格式化相关的方法,但常用“%v”打印任意类型变量,不需区分类型,“%+v”和“%#v”则更详细

字符串和数字转换

字符串和数字间转换通过strconv包的函数,Atoi表示字符串转数字相反则Itoa C++ 则是s.stoi()和to_string()函数来转换

if else判断

if后无括号,写括号的话编辑器会自动去掉,且后面必须接大括号

switch判断

switch后变量名无括号,case中不加break,且可以使用任意变量类型,当判断较多时可用switch完全替代if else

for循环

只有唯一的for循环,for中三语句任何语句都可省略且也没括号,循环中可用break或continue跳出或继续循环

range

常用range快速遍历数组、slice、map等,返回索引和值,可用“_”忽略索引

数组

类似其他语言中固定长度数组,实际很少使用,更多使用切片

切片

slice长度不固定,用make创建,append时自动扩容,可像python中切片一样截取

map

类似C++中的unordered_map,实际使用最频繁的数据结构,用make创建,常用val, ok:=m[key]写法,通过判断ok判断是否存在key对应的val

函数

参数和返回值类型后置,支持返回多个值,实际代码中几乎所有函数返回两个值:结果和错误信息,注意参数是都值传递,若想修改参数,需传递指针。首字母大写表示公共函数,类似C++中public函数,可包外访问

指针

类似C/C++指针,但操作有限,指针主要用途是对传入参数修改

结构体

结构体初始化时需传入每个字段初始值,也可键值对的方式初始化,通常用结构体的指针作为参数,既能修改结构体又能避免结构体的拷贝开销,

  • 字段首字母大写表示公开字段,类似C++中public
  • 字段首字母小写表示私有字段,类似C++中private

结构体方法

再函数名前带上结构体参数和括号,就实现类似其他语言中的类成员函数

错误处理

go常见做法是再传递结果的返回值的基础上,新增一个传递错误信息的返回值,这样能清晰知道哪个函数出错,且能用简单的if else处理错误

defer处理

go中为避免资源泄露,需用defer手动关闭资源,会在函数运行结束后执行

json处理

对已有结构体,保证每个字段首字母大写,是公开字段,就能用marshaler序列化变成json字符串,unmarshaler反序列化,可用json tag修改输出结果的字段名

时间处理

time包包含时间处理各种函数,用Date构造带时区时间,Now获取当前时间

进程处理

os包包含进程处理,Args得到命令参数,Getenv读环境变量,Command执行命令

以上就是个人总结Go语言的一些基础语法的使用规则。