青训营笔记(1) go语言基础语法

80 阅读5分钟

变量

赋值有三种:

  1. var a =
  2. F :=
  3. Const s string = "" 前两种都是自动类型推导

输出

  • fmt.Println 函数用于格式化输出,可以接受多个参数,并将它们打印到控制台。
  • 当你在 fmt.Println 函数中直接添加多个参数时,它们会被默认用空格分隔
  • 在输出结束后会自动换行。

条件判断和循环

都不带括号 图片.png

switch -case

图片.png 更高级,switch 不止能在一个集合中找,而且能将一个区间作为 case 了

切片(更高级的数组)

图片.png 其中 c 和 s 都是切片 相比于数组的优势:

  • 动态大小
  • 灵活性,容易进行切片操作,可以获取其中的一部分
  • 内存管理:只暴露了一部分给用户,这样可以避免用户直接操作底层数组,从而简化了内存管理
  • 有丰富的内置函数:如 appendcopylencap 等,这些函数使得对 slice 的操作更加便捷

map

图片.png

  • 也要用 make 来创建,但是不是一种 slice

图片.png 左值可以用两个变量,第一个接受 map 的返回值,第二个接受存在性

使用 range 进行遍历

图片.png

函数

特点:变量类型后置、返回值后置、可返回多个值 图片.png 往往是用第二个返回值(bool)判断存在性,第一个返回具体的值

指针

图片.png 如果函数不使用指针,那么它就不能在函数外部真正改变变量的值。第一个函数参数的传递方式是值传递,这意味着函数内部操作的是参数的副本,而不是原始值。

结构体

格式如下

图片.png

赋值和调用属性

图片.png 其中 abc 都是在声明的时候都直接初始化了(部分)值 可以单独声明再单独赋值(如 d)

结构体的方法

图片.png 在 func 后面,方法名前面定义这个方法属于哪个结构体,同样带指针的结构体变量会真正改变原来的值

错误

图片.png 错误可以作为其中一个返回值返回

  • 里面的这个 for 循环第一个_表示一个占位符,是一个不被使用的变量。用于忽略循环中的索引值
  • 如果想要使用索引,可以
for i, u := range users {
    // 使用i和u进行操作
}
  • nil 是一个预定义的标识符,表示零值
    • 当一个指针没有被分配到任何内存地址时,它的值就是 nil
    • 当一个切片或映射没有被初始化时,它们的值也是 nil
  • errors.New 函数创建一个新的错误对象,并提供一个描述性的错误消息。

String

常用方法

图片.png 注意每个汉字通常占用3个字节

输出格式

图片.png 注意 %+v%#v 两种格式化动词 %+v:这个格式化动词会输出结构体的字段名和字段值。 %#v:这个格式化动词会输出结构体的 Go 语法表示,包括结构体的类型、字段名和字段值。

其他和 C 语言差不多,但是不用区分具体的变量类型了,直接%v 即可

JSON

序列化

a := userInfo{Name: "wang", Age: 18, Hobby: []string{"Golang", "TypeScript"}}
buf, err := json.Marshal(a)

使用 json.Marshal(a)a 序列化为 JSON 格式,并返回字节切片 bufMarshal 函数在成功时返回 JSON 字节切片,在失败时返回错误。

打印 JSON 序列化结果

图片.png

  • fmt.Println(buf) 会输出 buf 的字节切片形式,这是二进制编码的 JSON 数据。
  • fmt.Println(string(buf))buf 转换为字符串并打印,这样就能看到 JSON 的可读形式

反序列化

图片.png 和直接 String (buf)不同

  • fmt.Println(string(buf)) 是将 JSON 数据转换成字符串并输出,用于查看 JSON 内容。
  • json.Unmarshal(buf, &b) 是将 JSON 数据解析到 Go 结构体中,获得这个结构体对象,以便程序进一步使用这些数据。
panic

panic 是一种终止程序执行并输出错误信息的机制,类似于异常处理中的“抛出异常”。 当程序执行到 panic 时,会立即中断当前函数的执行,并沿着调用栈向上传递,最终导致程序崩溃,除非捕获并处理该 panic

时间

  1. 声明时间

图片.png 2. 使用时间

图片.png

  • 打印时间信息
  • 时间格式化(有一个固定格式化的时间)
  • 时间差
  • 将时间换算
  1. 另一种格式化

图片.png

  • 接受两个参数:
    • 第一个参数是格式化字符串,指定了输入的时间字符串的格式;
    • 第二个参数是要解析的时间字符串。
  • 返回两个值:
    • 第一个值是解析后的时间对象 t3
    • 第二个值是一个错误对象 err,用于表示解析过程中是否发生了错误
  1. 判等和时间戳

图片.png

字符串转化类型

使用 strconv

图片.png 对于第一个

  • 目的:将字符串 "111" 转换为整数。
  • 第二个参数 10 表示字符串的基数为十进制。
  • 第三个参数 64 表示目标整数的位宽(即 int64)。 第二个例子
  • 目的:将字符串 "0x1000" 转换为整数。
  • 这里的基数参数为 0,表示 ParseInt 会==自动根据字符串前缀(如 0x 表示16进制)来识别进制==。
  • 结果将 0x1000 解析为 16 进制数 4096

命令行参数和外部命令

图片.png

  • os.Args:获取命令行参数。
  • os.Getenv:获取指定的环境变量。
  • os.Setenv:设置环境变量(仅在当前进程及其子进程中生效)。
  • exec.Command:用于执行外部命令,CombinedOutput 方法返回命令的标准输出和错误信息的合并结果。
    • 结果被存储在 buf 中,err 表示命令执行过程中是否发生了错误。