Go 语言入门极简指南:基础语法和常用特性解析——实践记录(后端) | 豆包MarsCode AI刷题
Go语言基础语法整理(极简版)
适合有C/C++基础的同学理解
1、基础运行:HelloWorld
大体思路
1、用 package main 表示文件属于 main 包的一部分
2、导入标准库的包(这里是fmt)
3、写主函数main()
大致样式
package main
import ( 内容 )
func main() { 内容 }
注意:没有分号!
Go不通过缩进来决定代码的逻辑层次。
具体代码
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
2、量、数组、切片和map
2.1、变量&常量
变量类型:字符串、整数、浮点型、布尔型
类型可以不用刻意标明,统一用var即可,会自动识别
如果要声明类型,与C那样变量类型写在变量名前面不同,Go的变量类型写在变量名后面。
变量声明方式:
var name string = ""
或者
变量 := 值
常量就是把var改为const,常量没有确定类型,go语言自动确定。
2.2、数组
有编号且长度固定的元素序列。真实业务用的少(长度固定),更多用切片
2.3、切片slice
原理是存储了一个长度和一个容量,加一个指向数组的指针。
拥有像python一样切片的操作。
可以任意更改长度,可以用make创建一个切片,可以用append来追加元素。
2.4、map
可以理解为其他语言里面的哈希表或字典。
用make创建一个空map。
第一个是key的类型,第二个是value的类型。
可以从里面存储或取出键值对,用delete删除键值对。
map完全无序!遍历、输出时全部是随机顺序。
3、运行逻辑(条件、循环、选择、快速遍历)
3.1、if else
go语言里面的if后面没有小括号,且后面必须加大括号,其余与C相同。
3.2、for
go语言只有for循环,没有别的循环。
for循环后面没有小括号。
3.3、switch
go语言switch后面无小括号
在C++里面,switch case如果不 加break的话会然后会继续往下跑完所有的case,在go语 言里面不需要加break。
3.4、range
range可以用来快速遍历slice或map。
返回两个值,第一个是索引,第二个是对应位置的值,若不需要索引,用下划线来忽略。
4、函数、指针、结构体、结构体方法
4.1、函数
go语言中,函数的变量类型是后置的。
函数原生支持返回多个值,实际业务逻辑代码中也是返回两个值,第一个是真正结果,第二个是错误信息。
4.2、指针
相对C和C++,支持的操作有限。 go语言指针的一个主要用途是对于传入参数进行修改。
4.3、结构体
结构体是带类型的字段的集合。
4.4、结构体方法
类似于成员函数。
从普通函数,改成结构体方法的具体步骤是,把第一个参数,加上括号,写在函数名称前面。
实现结构体有两种方法,带指针和不带指针,带指针时,可以对结构体进行修改;不带指针时,无法对结构体进行修改。
5、字符串操作与格式化
标准库strings里面包含很多常用字符串工具函数。
包含Contains、Count、HasPrefix、HasSuffix、Index、Join、Repeat、Replace、Split、ToLower、ToUpper功能。
可以直接打印,也可以像C一样格式化打印。 用%v打印任何类型的变量。用%+v打印详细结果,用%#v更详细。 用%.2f打印需要留特定位数的浮点变量。
6、错误处理、JSON、时间、数字解析、进程信息
6.1、错误处理
errors包是包含错误处理的包。
函数一般返回两个值,如果无错误,返回结果和nil;如果有错误,返回nil和error。
一般用errors.New(内容)来创建一个新的错误。
6.2、JSON
JSON是轻量级数据交换格式。
将Go语言中的数据结构转换为JSON格式的字符串。用json.Marshal。
将JSON格式的字符串转换回Go语言中的数据结构。用json.Unmarshal。
6.3、时间
用time库来处理有关时间问题。
time.Now()获取当前时间
6.4、数字解析
用strconv库进行字符串转换。
用strconv.parseInt或strconv.parseFloat来解析一个字符串。
用Atoi把一个十进制字符串转成数字。用itoA把数字转成字符串。
6.5、进程信息
os和os/exec库来处理有关信息。
用os.Argv来得到程序执行的时候的指定的命令行参数。