GO语言基础语法 | 青训营笔记

76 阅读4分钟

if-else语句的判断语句不需要加小括号

循环语句

  1. 只有唯一一个循环语句——for
  2. 可写可不写循环条件语句;
  3. 可用continue继续循环,break跳出循环

分支语句switch

  1. 默认不需要加break语句,一个分支执行结束后,自动跳出分支语句;
  2. 可以使用任意数据类型,包括字符串,结构体等等;

数组Array

  1. 长度固定
  2. 数据类型相同
  3. 内存空间是连续的

切片Slice(可变长度的数组)

定义:切片是对连续内存片段的引用,可以包括整个数组,但不包括终止索引

主要用于快速操作一块数据集合

  1. 可使用make函数来构建切片
s := make([]string,3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
  1. 可使用内建函数append添加元素,但追加元素必须赋值给元素组
s = append(s,"d")
  1. append既可以在尾部添加元素,也可以在头部添加元素,在头部添加元素时会重新分配内存,对比在尾部添加元素性能较差
var a = []int{1,2,3}
a = append([]int{0},a...)
a = append([]int{-2,-3,-1},a...)
  1. 切片内存大小不够时会按容量大小的2倍自动进行扩容,

map是基于Key-Value的数据结构

  1. 使用make创建map
m := make(map[string] int)
m["one"] = 1
m["two"] = 2
  1. 使用delete删除map
delete(m,"one")
  1. 判断k-v是否存在
value, ok := map[key]

range遍历有两个参数,参数一是索引,参数二是索引对应的值

for k, v := range m {
    fmt.Println(k, v)
}

指针

定义:*(星号)符号表示,指针存储变量的地址

作用:主要用于更改函数参数的值

  1. 指针的零值是nil
  2. 指针不支持算术运算
  3. 指针指向类型不能随意更改
  4. 不支持常量指针和指针常量
  5. 两个指针只有满足特定条件才可以进行比较

结构体struct

定义:封装多个基本数据类型,实现单一数据类型不能满足的需求

  1. 可初始化全部结构体变量
  2. 可对单一变量进行初始化,未初始化的变量值为空值
  3. 结构体.变量名 实现结构体变量的读和修改
  4. 非结构体指针形式作为函数的参数时是值传递,在函数中的操作不会影响原结构体;结构体指针作为函数的参数是是引用传递,在函数中的修改会直接影响到原结构体
type user struct{
    name string
    password string
}
a := user{name: "wang", password: "1024"}
b := user{name: "wang"}
c := user{"wang","1024"}
a.name 读写结构体的值
//结构体可作为函数的参数,指针参数可用来修改值

结构体方法

定义:结构体方法是一种与特定关联的函数

既是函数又是结构体,因此也有结构体指针和非结构体只针对参数,或者叫值接收器方法,指针接收器方法。

type user struct{
    username string
    password string
}
func (u user) checkPassword(password string) bool {
    return u.password = password
}
a.checkPassword("2024")

错误处理

  1. 通过返回error类型的值来实现
  2. 错误只能是字符串类型
  3. 尽管可以预判错误,但错误信息不具体

字符串操作

  1. 字符串是不可变的,可将字符串转化为[]byte,然后再转化为string
  2. 无论是哪种转换,都会重新创建字符串
  3. 可以使用双引号或反引号包含字符序列,从而创建字符串
  4. 使用“+”拼接字符串
  5. len()获取字符串长度,Split()分割字符串,Replace()替换字符串等等

字符串格式化

使用Printf这样的格式化函数来格式化字符串

  • %s 字符串类型
  • %d 整型
  • %f 浮点型,%.2f保留两位小数
  • %t 布尔型
  • %v 通用类型,表示任意类型的变量;%+v 可得到字段名和值,%#v 可得到结构体构造的类型名称和值

JSON处理

  1. 结构体序列化为JSON,需将结构体中每个字段名的首字母,再使用json.Marshal()函数即可
  2. Go的大多数数据类型都可以转化为JSON,,但channel、complex和函数除外
  3. 转化前数据结构出现了指针,会将指针转化成指针所指向的值;如果指针指向的是零值,会转化为nil
  4. 可使用json.Unmarshal()函数将JSON文本解码为Go里面预期的数据结构
  5. 如果解码未知的JSON,只需将解码后的JSON数据输出到一个空接口

时间处理

  1. time.Now()获取当前时间;Sub()对两段时间做减法得到时间段;Format函数将时间格式化为某种字符串形式
  2. now.Unix()将当前时间转换为时间戳

数字解析

  1. 使用strconv.Atoi()函数将字符串转化为数字
  2. 使用strconv.Itoa()函数将数字转化为字符串

进程信息

  1. os.Args获取命令行进程参数
  2. os.Getenv获取环境变量
  3. os.Setenv设置环境变量