2022-10-01
Golang入门笔记-CH01-Go语言介绍与安装
2022-10-01 ~ 2022-10-01

1. Go 语言介绍

1.1 Go 语言的发展

Go 语言又称 Golang,起源于 2007 年,来自于谷歌内部的一个项目,于 2009 年正式对外发布。创始团队有三人,都是计算机界的大佬:

  • Robert Griesemer:参与开发 Java HotSpot 虚拟机
  • Rob Pike:Go 语言项目总负责人,贝尔实验室 Unix 团队成员,参与的项目包括 Plan 9,Inferno 操作系统和 Limbo 编程语言
  • Ken Thompson:C 语言、Unix 和 Plan 9 的创始人之一

Go 语言是开源的,通过开源社区的力量得到了快速发展,越来越多的开发者开始使用 Go 语言。自 Go 语言发布以来,超过 200 名非谷歌员工贡献者对 Go 语言核心部分提交了超过 1000 个修改建议。在过去的 18 个月里,又有 150 开发者贡献了新的核心代码。

2022-10-01
Golang入门笔记-CH02-Go语言基本语法和结构
2022-10-01 ~ 2022-10-01

1. 命名规范

1.1 文件

Go 语言中,源文件以 .go 格式保存,例如 main.go,且文件名只能由小写字母组成,若有多个单词,可以用下划线 _ 进行拼接,例如 my_file.go

1.2 标识符

Go 语言中,标识符是区分大小写的,标识符必须以字符或 _ 开头,后面可以跟 0 个或多个字符(字母、数字以及其他符号),例如 __abca1b_2。同时标识符不能是 Go 语言中的保留关键字,不能以数字开头,也不能有运算符

2022-10-01
Golang入门笔记-CH03-Go语言基本数据类型
2022-10-01 ~ 2022-10-01

1. 常量

1.1 常量的定义

常量是一种特殊的变量,被初始化之后就无法再改变。

Go 语言中,常量的类型只能是布尔型数字型(整型、浮点型和复数)字符串型

常量可以使用关键字 const 来定义,定义格式为 const variable [type] = value

2022-10-01
Golang入门笔记-CH04-Go语言流程控制
2022-10-01 ~ 2022-10-01

前言

流程控制是每门语言控制程序逻辑和执行顺序的重要组成部分,Go 语言中常见的流程控制有 ifforswitchbreakcontinuegoto 是为了简化流程控制,降低代码复杂度。

2022-10-01
Golang入门笔记-CH05-数组和切片
2022-10-01 ~ 2022-10-01

数组

初始化

数组可以保存指定长度的多个数据,且这些数据的类型都相同,数据类型可以是原始类型,如整型和字符串等,也可以是自定义类型。

数组通过索引来访问元素,索引从 0 开始,第一个元素的索引为 0,第二个为 1,依此类推。

2022-10-01
Golang入门笔记-CH06-Map
2022-10-01 ~ 2022-10-01

声明和初始化 Map

map 是一种特殊的数据结构,通过键 key 和值 value 来保存数据,可以快速地根据 key 找到其对应的 value,与 python 中的字典和 Java 中的 HashMap 类似。

map引用类型,声明方式如下:

1
var variable map[keyType]valueType

在声明的时候不需要知道 map 的长度,map 是可以动态增长的。

2022-10-01
Golang入门笔记-CH07-结构体和方法
2022-10-01 ~ 2022-10-01
Go 语言通过 定义结构体来支持用户自定义类型。一个结构体代表现实世界中的一个实体,类似于 Java 中的实体类。当要定义一个类型时,这个类型包含很多属性,例如定义一个用户类型,用户类型中包含用户名、密码和生日等属性,就可以使用结构体。
2022-10-01
Golang入门笔记-CH08-接口
2022-10-01 ~ 2022-10-01

1. 使用接口的原因

我们来看一段代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
type Cat struct{}

func (c Cat) Say() string { return "喵喵喵" }

type Dog struct{}

func (d Dog) Say() string { return "汪汪汪" }

func main() {
	c := Cat{}
	fmt.Println("猫:", c.Say())
	d := Dog{}
	fmt.Println("狗:", d.Say())
}

上述代码中定义了狗 Dog 和猫 Cat 以及它们对应的方法 Say(),若要继续添加鸭 Duck 方法和其对应的方法 Say(),重复代码会非常多。我们可不可以从这三种动物类型中抽象出方法 Say(),这就是接口的作用,接口可以定义抽象方法,来规范我们的代码。

2022-10-01
Golang入门笔记-CH09-反射
2022-10-01 ~ 2022-10-01

反射是用程序检查其所拥有的结构,尤其是类型的一种能力。反射可以在运行时(不必在编译时)检查类型和变量,例如大小、变量、方法和动态调用这些方法。

方法和类型的反射

reflect 包提供了反射功能,它定义两个重要类型:TypeValue,分别表示动态类型和值。

2022-10-01
Golang入门笔记-CH10-函数高级特性
2022-10-01 ~ 2022-10-01

传递变长参数

如果函数最后一个参数采用 ...type 的形式,那么这个函数就可以处理一个变长参数(长度可以为 0),这样的函数被称为变参函数,如:

1
func myFunc(a int, args ...int)

如果参数存储在切片 arr 中,可以用 arr... 来传递参数,如:

2022-10-01
Golang入门笔记-CH11-错误处理
2022-10-01 ~ 2022-10-01

Go 没有像 Java 那样的 try/catch 异常处理机制,而是用 defer/panic/recover 机制来处理异常。

Go 语言的设计者认为 try/catch 机制使用过于泛滥,而且从底层向高层抛出错误太耗费资源,因此他给 Go 语言设计了一种返回值处理错误方式:通过在函数和方法中返回错误对象,这个错误对象一般在多个返回值的最后;如果返回 nil,则表明没有错误,且主调函数应该检查并处理每一个错误。

2022-10-01
Golang入门笔记-CH12-并发
2022-10-01 ~ 2022-10-01

基本概念

线程和进程

  • 进程 :是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个 独立单位
  • 线程 :是进程的一个执行实体,是 CPU 调度和分派的 基本单位 ,它是比进程更小的能独立运行的 基本单位

一个进程可以创建或撤销多个线程;同一个进程中的多个线程之间可以并发执行。