- 变量
- 变量的声明1:`var a = true
- 变量的声明2:
var a int
- 变量的声明3:
var a,b int = 0,1
- 变量的声明3:省略varif的赋值写法——
a := “guagua”,等同于var s string和 s = "guagua"声明+赋值两句话,也等同于var a = "guagua"或var a string = "guagua"
- 注意:若声明了类型可不赋值,不声明类型一定要赋值(否则直接报错)
- 常量const:不需要声明类型,会根据使用的上下文自动确定类型
- 条件判断语句if else
if语句类似于c语言,但是可以省略条件的括号,必须写大括号
if num := 9; num < 0 {
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}
输出为9 has 1 digit
- 循环语句for
go语言的循环语句只有for循环,没有while、dowhile
- 分支结构switch
类似c语言,与c的区别:1)变量名可以省略小括号,2)不需要在case里写break,3)switch支持任意类型变量,也可以不加变量,取代if else语句
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
- 数组
长度固定,声明数组时需要指定类型和长度
var a_list [5]int,b := [5]int{1,2,3,4,5},二维数组var td [2][3]int
- 切片
相比数组,切片更加常用(有点类似于python的list的感觉),切片的长度不固定
- 使用make创建切片
s := make([]string, 3)
- 不使用make创建切片
s := []string{"a","b","c","d"} var s = []string{}
- 使用append追加元素
s = append(s,"d","e"),注意append函数返回值必须赋值给原数组
- copy复制切片
c := make([]string, len(s)) copy(c,s)
- 切片索引类似于python
s[2:5],不同是go的切片不支持负数索引
- 哈希map/字典
类似于python的字典dict
- 使用make创建map:
m := make(map[string]int),string代表key,int代表value类型
- 不使用make创建map:
m2 := map[string]int{"one": 1, "two": 2}
var m3 = map[string]int{"one": 1, "two": 2}
- 方括号读取和写入K-V对:
m["one"]=1,res, ok = m["two"],ok判断key值是否存在返回true/false
- delete删除k-v对:
delete(m, "one")
- map的元素顺序类似于python的dict,偏随机顺序
- range遍历
- 可以遍历数组、切片、map等
- 遍历map
for k, v := range m{fmt.println(k,v)} 其中返回的分别是key和value(如果只写一个返回值则只返回key)
- 遍历切片/数组
nums := []int{1,2,3,4}
for i, num := range nums {
fmt.println(num)
}
for i := 0; i < len(nums); i++{
fmt.println(nums[i])
}
- 函数
- 函数组成: 返回值一般还包括一个ok/error,以便输出错误信息
func 函数名(参数1 类型1,参数2 类型2..) (返回值1 返回类型1, ..,ok bool){
函数体
}
- 指针
与c语言类似,使用*和&
- 结构体
- 结构体是带类型的字段的集合
type 结构体名 struct{name string}
- 结构体方法
func (形参名 结构体名) 函数名(参数名 参数类型){
...
}
- 错误处理error
- 在函数的返回值中加上
err error,若没有错误可返回nil,否则可以返回error.New("错误信息")
- 字符串工具函数
- Contarins,Count,Index,Join等
- 格式化:
fmt.Println(...),fmt.Printf("%v",a)类似于c的printf,但是不需要指定%类型,同样可以使用%.2f来输出指定小数位数
- JSON处理
- 事件处理
time.Now(),t = time.Date(...),求时间差t.Sub(t1),格式化时间为字符串str = t.Format("2006-01-02 15:04:05"),字符串转为时间类型time.Paese("2006-01-02 15:04:05","2024-01-02 15:04:05")时间戳time.Now().Unix()
- 数字解析
- 使用strconv库来进行解析字符串
- 常用的有
strconv.ParseFloat(),strconv.ParseInt("111",10(进制),64(精度)), strconv.Atoi("123"),strconv.Itoa(123),注意,以上的返回值都有两个,一个返回值,一个err
- 进程信息(这一部分不太懂)