这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
Go语言基础 | 青训营笔记
1.1 Go语言特点
- 高性能、高并发
- 语法简单、学习曲线平缓
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
2.1 变量
- 常见的变量类型有字符串、整数、浮点型、布尔型。
- go语言中字符串是内置类型,可以直接使用
+拼接,也可直接使用==进行比较 - go的两种变量声明方式:
var name (type) = val、name := val - go的常量声明方式:
const name (type) = val,go的常量没有确定的类型,语言会根据代码的上下文自动确定类型
2.2 if else
写法和C/C++类似,不同点在于if后面没有括号,且判断条件后必须直接接大括号。
2.3 for
go语言的循环只有for循环一种,且for循环的判断条件也没有括号。
2.4 switch
switch的判断条件没有括号,且执行完一种case后,会直接break,不需要自己写break语句。
2.5 数组/切片
由于数组的长度是固定的,因此实际应用场景多使用切片,切片即可变长度的数组,可以使用make来创建切片。
2.6 map
可使用make去创建一个空map,语法如name := make(map[type1]type2),该结构是完全无序的,不会按照字母顺序或者插入顺序访问,而是类似于随机访问。
2.7 range
可用range快速遍历数组/切片/字典的元素,对于数组/切片,会返回index, val;对于字典,会返回key, val
2.8 函数
func关键字定义函数,参数变量及返回变量都是获知的。
2.9 指针
指针的主要作用是对传入的参数做一个修改,用法和C/C++类似。
2.10 结构体/结构体方法
结构体和结构体方法的示例代码
package main
import "fmt"
type user struct {
name string
password string
}
func (u user) checkPassword(password string) bool {
return u.password == password
}
func main() {
a := user{name: "wao", password: "1025"}
a.checkPassword("2048")
fmt.Println(a.checkPassword("2048")) // False
}
结构体方法类似于结构体的类成员函数,可以通过.运算访问结构体的成员和结构体方法
2.11 错误处理
go中习惯于用函数返回值进行错误信息传递,可用if else结构进行错误处理
2.12 字符串操作/字符串格式化
fmt.Println()、fmt.Printf()
2.13 JSON处理
将结构体中每个变量名的第一个字母大写,即可使用json.Marshal()函数将结构体序列化。也可使用json.Unmarshal()函数将序列化的字符串反序列化的一个空的变量中。
2.14 时间处理
time.Now():快速获取当前时间time.Date():构造一个带时区的时间time.Sub():对时间做减法,得到时间段(可获取相差分钟数和秒数)time.Parse():解析时间
2.15 数字解析
示例如下:
strconv.ParseFloat("1.234", 64) // 字符串,返回64位长度strconv.PasreInt("111", 10, 64) // 字符串,进制,返回长度若进制为0,则系统自动推测进制的值strconv.Atoi("123")
2.16 进程信息
os.Args:获取进程执行时的一些命令行参数os.Getenv():获取环境变量os.Setenv(): 设置环境变量exec.Command():快速启动子进程,并获取其输入输出