Go语言基础学习笔记
1. 引言
Go语言是一种简洁、高效、并发的编程语言,由Google开发。本篇学习笔记旨在介绍Go语言的基础知识,包括语法、数据类型、函数、控制流等内容。
Go语言特点
· 支持高性能,高并发
· 简单易懂
·有完整的标准库
·快速编译
·跨平台
·自带垃圾回收机制
2. 语法
Go语言的语法简洁明了,容易上手。以下是一些重要的语法规则:
- Go语言使用关键字
package来定义代码所属的包,使用关键字import引入其他包。 - 每个Go程序都必须包含一个
main包和一个main函数作为程序的入口点。 - 代码块使用花括号
{}进行界定,不使用分号作为语句结束符。 - 注释可以使用
//进行单行注释,或使用/* */进行多行注释。
3. 数据类型
Go语言的数据类型包括基本类型和复合类型:
- 基本类型:包括整型、浮点型、布尔型、字符串等。Go语言支持多种整型和浮点型的变量定义和操作。
- 复合类型:包括数组、切片、字典、结构体等。切片是一种动态大小的序列,字典是一种键值对的集合。
4. 函数
Go语言中的函数是一等公民,可以定义和使用函数。以下是一些函数相关的要点:
- 使用关键字
func定义函数,可以指定参数和返回值。 - 可以使用多个返回值,可以命名返回值,也可以使用
_忽略某些返回值。 - 函数可以作为参数传递给其他函数,也可以作为返回值。
package main
import "fmt"
func add(a int, b int) int {
return a + b
}
func add2(a, b int) int {
return a + b
}
func exists(m map[string]string, k string) (v string, ok bool) { 支持多个值返回,通常第一个值是真正返回值,第二个值为错误信息
v, ok = m[k]
return v, ok
}
func main() {
res := add(1, 2)
fmt.Println(res) // 3
v, ok := exists(map[string]string{"a": "A"}, "a")
fmt.Println(v, ok) // A True
}
5. 控制流
控制流用于控制程序的执行顺序,Go语言提供了常见的控制流结构:
- 条件语句:使用
if和else关键字进行条件判断,支持使用switch关键字进行多分支判断。 - 循环语句:使用
for关键字进行循环,支持多种循环形式,如for i := 0; i < 10; i++和for range等。
6. 并发
Go语言内置了轻量级的并发支持,通过使用goroutine和channel可以实现并发编程。以下是一些并发编程的要点:
- goroutine是一种轻量级的线程,可以同时执行多个goroutine。
- channel是用于goroutine之间的通信的管道,可以在不同的goroutine之间传递数据。
- 使用关键字
go可以创建一个新的goroutine,函数会在新的goroutine中并发执行。
7. 错误处理
在Go语言中,错误处理是一项重要的任务。以下是一些错误处理的要点:
- Go语言使用内置的
error类型来表示错误,函数可以返回一个error类型的值来指示出现的错误。 - 可以使用
if err != nil来检查函数返回的错误是否为空,如果不为空,则表示发生了错误。 - 可以使用关键字
defer来延迟执行一段代码,通常用于释放资源或进行清理操作。 - 可以使用
panic和recover来处理异常情况。panic用于引发异常,而recover用于捕获并处理异常。
8. 包管理
Go语言的包管理是一种组织和管理代码的方式,以下是一些包管理的要点:
- 每个Go程序都由一个或多个包组成,可以使用
import关键字引入其他包。 - 可以使用
go mod命令来初始化和管理项目的依赖关系,它会生成一个go.mod文件。 go.mod文件记录了项目的依赖项和版本信息,可以使用go get命令来下载和更新依赖项。
9. 序列化和反序列化
下面以一个简单的例子,来展示官方的json库
type DictReqeust struct {
TransTyep string `json:"trans_type"`
Source string `json:"source"`
}
type DictResponse struct {
Rc int `json:"rc"`
Wiki struct {
} `json:"wiki"`
Dictionary struct {
Prons struct {
EnUs string `json:"en-us"`
En string `json:"en"`
} `json:"prons"`
Explanations []string `json:"explanations"`
Synonym []string `json:"synonym"`
Antonym []string `json:"antonym"`
WqxExample [][]string `json:"wqx_example"`
Entry string `json:"entry"`
Type string `json:"type"`
Related []interface{} `json:"related"`
Source string `json:"source"`
} `json:"dictionary"`
}
func () {
request := DictReqeust{
TransTyep: "en2zh",
Source: word,
}
buf, err := json.Marshal(request)
if err != nil {
fmt.Println(err)
return
}
// 省略执行请求的过程,直接跳到解析返回的数据
bodyText, err := io.ReadAll(resp.Body)
var response DictResponse
if err != nil {
log.Fatal(err)
}
err = json.Unmarshal(bodyText, &response)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%#v\n", response)
}
10. 总结
本篇学习笔记简要介绍了Go语言的基础知识,包括语法、数据类型、函数、控制流、并发、错误处理和包管理等内容。掌握这些基础知识将为后续的学习和开发打下坚实的基础。在进一步学习Go语言的过程中,可以深入了解每个主题,并进行实践和实际项目开发,以提高对Go语言的理解和应用能力。