Go语言基础 | 青训营笔记

525 阅读3分钟

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

Go语言基础 | 青训营笔记

1.1 Go语言特点

  1. 高性能、高并发
  2. 语法简单、学习曲线平缓
  3. 丰富的标准库
  4. 完善的工具链
  5. 静态链接
  6. 快速编译
  7. 跨平台
  8. 垃圾回收

2.1 变量

  • 常见的变量类型有字符串、整数、浮点型、布尔型。
  • go语言中字符串是内置类型,可以直接使用+拼接,也可直接使用==进行比较
  • go的两种变量声明方式:var name (type) = valname := 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():快速启动子进程,并获取其输入输出