变量
赋值有三种:
- var a =
- F :=
- Const s string = "" 前两种都是自动类型推导
输出
fmt.Println函数用于格式化输出,可以接受多个参数,并将它们打印到控制台。- 当你在
fmt.Println函数中直接添加多个参数时,它们会被默认用空格分隔 - 在输出结束后会自动换行。
条件判断和循环
都不带括号
switch -case
更高级,switch 不止能在一个集合中找,而且能将一个区间作为 case 了
切片(更高级的数组)
其中 c 和 s 都是切片
相比于数组的优势:
- 动态大小
- 灵活性,容易进行切片操作,可以获取其中的一部分
- 内存管理:只暴露了一部分给用户,这样可以避免用户直接操作底层数组,从而简化了内存管理
- 有丰富的内置函数:如
append、copy、len、cap等,这些函数使得对slice的操作更加便捷
map
- 也要用 make 来创建,但是不是一种 slice
左值可以用两个变量,第一个接受 map 的返回值,第二个接受存在性
使用 range 进行遍历
函数
特点:变量类型后置、返回值后置、可返回多个值
往往是用第二个返回值(bool)判断存在性,第一个返回具体的值
指针
如果函数不使用指针,那么它就不能在函数外部真正改变变量的值。第一个函数参数的传递方式是值传递,这意味着函数内部操作的是参数的副本,而不是原始值。
结构体
格式如下
赋值和调用属性
其中 abc 都是在声明的时候都直接初始化了(部分)值
可以单独声明再单独赋值(如 d)
结构体的方法
在 func 后面,方法名前面定义这个方法属于哪个结构体,同样带指针的结构体变量会真正改变原来的值
错误
错误可以作为其中一个返回值返回
- 里面的这个 for 循环第一个_表示一个占位符,是一个不被使用的变量。用于忽略循环中的索引值
- 如果想要使用索引,可以
for i, u := range users {
// 使用i和u进行操作
}
- nil 是一个预定义的标识符,表示零值
- 当一个指针没有被分配到任何内存地址时,它的值就是
nil - 当一个切片或映射没有被初始化时,它们的值也是
nil。
- 当一个指针没有被分配到任何内存地址时,它的值就是
errors.New函数创建一个新的错误对象,并提供一个描述性的错误消息。
String
常用方法
注意每个汉字通常占用3个字节
输出格式
注意
%+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 格式,并返回字节切片 buf。
Marshal 函数在成功时返回 JSON 字节切片,在失败时返回错误。
打印 JSON 序列化结果
fmt.Println(buf)会输出buf的字节切片形式,这是二进制编码的 JSON 数据。fmt.Println(string(buf))将buf转换为字符串并打印,这样就能看到 JSON 的可读形式
反序列化
和直接 String (buf)不同
fmt.Println(string(buf))是将 JSON 数据转换成字符串并输出,用于查看 JSON 内容。json.Unmarshal(buf, &b)是将 JSON 数据解析到 Go 结构体中,获得这个结构体对象,以便程序进一步使用这些数据。
panic
panic 是一种终止程序执行并输出错误信息的机制,类似于异常处理中的“抛出异常”。
当程序执行到 panic 时,会立即中断当前函数的执行,并沿着调用栈向上传递,最终导致程序崩溃,除非捕获并处理该 panic。
时间
- 声明时间
2. 使用时间
- 打印时间信息
- 时间格式化(有一个固定格式化的时间)
- 时间差
- 将时间换算
- 另一种格式化
- 接受两个参数:
- 第一个参数是格式化字符串,指定了输入的时间字符串的格式;
- 第二个参数是要解析的时间字符串。
- 返回两个值:
- 第一个值是解析后的时间对象
t3 - 第二个值是一个错误对象
err,用于表示解析过程中是否发生了错误
- 第一个值是解析后的时间对象
- 判等和时间戳
字符串转化类型
使用 strconv 包
对于第一个
- 目的:将字符串
"111"转换为整数。 - 第二个参数
10表示字符串的基数为十进制。 - 第三个参数
64表示目标整数的位宽(即int64)。 第二个例子 - 目的:将字符串
"0x1000"转换为整数。 - 这里的基数参数为
0,表示ParseInt会==自动根据字符串前缀(如0x表示16进制)来识别进制==。 - 结果将
0x1000解析为 16 进制数4096。
命令行参数和外部命令
os.Args:获取命令行参数。os.Getenv:获取指定的环境变量。os.Setenv:设置环境变量(仅在当前进程及其子进程中生效)。exec.Command:用于执行外部命令,CombinedOutput方法返回命令的标准输出和错误信息的合并结果。- 结果被存储在
buf中,err表示命令执行过程中是否发生了错误。
- 结果被存储在