Go语言基础 | 青训营笔记

62 阅读4分钟

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语言提供了常见的控制流结构:

  • 条件语句:使用ifelse关键字进行条件判断,支持使用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来延迟执行一段代码,通常用于释放资源或进行清理操作。
  • 可以使用panicrecover来处理异常情况。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语言的理解和应用能力。