一、Goland语言介绍
Go 和 C语言、C++、Python、Java 等一样都是编程语言。学习任何一门编程语言本质上都分3步走:
- 第一步:安装
解释器 或 编译器
。 - 第二步:学相关编程语言语法,然后写代码。
- 第三步:用已安装
解释器 或 编译器
去运行自己写的代码,这样代码就会去完成我们编写的功能了。
Go是编译型语言,所以我们一般称Go安装是编译器
。
Go是开源且跨平台的一门编程语言,所以他支持window、linux、mac操作系统,同时也意味着我们可以在各种系统中安装Go的编译器。
1、垃圾回收机制
- 内存自动回收,再也不需要开发人员管理内存。
- 开发人员专注业务实现,降低了心智负担。
- 只需要new分配内存,不需要释放。
2、天然并发
- 从语言层面支持并发,非常简单。
- goroute,轻量级线程,创建成千上万个goroute成为可能。
- 基于CSP(Communicating Sequential Process)模型实现。
func main() {
go fmt.Println("Hello")
}
3、channel
- 管道,类似 unix/linux 操作系统的 pipe
- 多个 goroute 之间通过 channel 进行通信
- 支持任何类型
package main
import "fmt"
func test_pipe() {
pipe := make(chan int, 3) // 创建一个管道,管道的容量为3
pipe <- 1 // 向管道中写入一个数据
pipe <- 2 // 向管道中写入一个数据
pipe <- 3 // 向管道中写入一个数据
pipe <- 4 // 向管道中写入一个数据,管道已经满了,会报错
fmt.Println(len(pipe))
}
"""
插入三个时输出结果:
PS D:\GolangProjects\src\crm> go run app.go pipe.go
3
插入四个时输出结果:
PS D:\GolangProjects\src\crm> go run app.go pipe.go
fatal error: all goroutines are asleep - deadlock!
"""
4、多返回值
一个函数返回多个值:
// calc.go
package main
func calc(a int, b int) (int, int) {
c := a + b
d := (a + b) / 2
return c, d
}
// app.go
func main() {
sum, avg := calc(200, 300)
fmt.Println("sum=", sum, "avg=", avg)
}
// 执行程序
PS D:\GolangProjects\src\crm> go run app.go calc.go
sum= 500 avg= 250
5、包
(1)包概念
- 和 python 一样,把相同功能的代码放到一个文件夹中,这个文件夹就是一个包。
- 包名和文件夹名一致。
- 包名不能包含 - ,必须是小写字母。
- 包名不能和系统包名重复,比如 fmt,io,os 等。
- 包名不能和自定义包名重复,比如 luffycity,luffy 等。
- 包可以被其他包导入,导入的包必须被使用,否则编译不通过。
- main 包是特殊的包,它包含了可执行程序的入口函数 main(),main 包的包名必须为 main。
- 包的主要作用是封装代码,提高代码的可重用性。
(2)关于包的分类
- main包,如果是main包,则必须写一个main函数,此函数就是项目的入口(main主函数)。 编译生成的就是一个可执行文件。
- 非main包,用来将代码进行分类,分别放在不同的包和文件中。