①. Go语言特性
0x01. Go语言特点
> 自动垃圾回收
> 更丰富的内置类型
> 函数多返回值
> 错误处理
> 匿名函数和闭包
> 类型和接口
> 并发处理能力
> 反射
0x02. 应用场景
多应用于应用高并发,低延时的应用场景。
②. Go环境安装
0x01. Go安装包下载
官方安装包下载地址:
- https://golang.org/dl/
- https://golang.google.cn/dl/
国内镜像源下载地址:
- https://mirrors.ustc.edu.cn/golang/
- https://studygolang.com/dl
0x02. Go语言环境变量设置
变量名 | 描述 |
---|---|
GOROOT | Go 语言安装根目录的路径,也就是 GO 语言的安装路径。 |
GOPATH | Go 语言的工作目录, 用于存放源代码、二进制文件,临时文件等。 |
GOPROXY | Go 代理配置,便于加速依赖包的下载速度。 |
0x02. GOPATH目录详解
GOPATH 下会有3个目录:src、bin、pkg
- src目录:go编译时查找代码的地方;按照golang默认约定,go run,go install等命令的当前工作路径(即在此路径下执行上述命令)。
- bin目录:go get这种bin工具的时候,二进制文件下载的目的地; golang编译可执行文件存放路径
- pkg目录:golang编译包过程中生成的临时文件。会检测代码变动,从而减少编译时间。
③. Go程序示例
0x01. Hello World 示例
package main
//package用于包声明,必须在源文件中非注释的第一行指明这个文件属于哪个包。
//package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
import "fmt"
//go编译器引入fmt包(函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。
func main() { //注意 { 不能单独放在一行
//定义主函数,即程序开始执行的函数。
//main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数。
//如果有 init() 函数则会先执行该函数。
fmt.Prinln("Hello World!") //打印输出 Hello World
//可以将字符串输出到控制台。
}
0x02. Go代码结构
④. 编译&运行
0x01. 不编译运行go代码
root@macbook:~# go run 1.go
Hello World!
0x02. 编译后运行go程序
root@macbook:~# go build hello.go
root@macbook:~# chmod +x hello
root@macbook:~# ./hello
Hello, World!
0x03. 跨平台编译
root@macbook:~# CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -v -ldflags '-w -s' -gcflags '-N -l' -o hello hello.go
root@macbook:~# scp hello root@armbian:/root/
root@armbian:~# chmod +x hello
root@armbian:~# ./hello
Hello, World!
变量
0x01. 变量声明
标准格式
声明变量:var name type ,其中var是声明变量的关键字,name是变量名称,type是变量类型.标准格式eg: var a, b *int
package main
import "fmt"
func main(){
//变量声明
var a,b,c int
var d str
//变量赋值
a = 5
b = 4
d = a - b + c
fmt.Println(c)
}
0x02. 数据类型
var s1 string
s1 = "Learn Go!"
// 一次声明多个变量
var b, c int = 1, 2
var d = true
注释符
注释不会被编译,常用于函数功能描述
// 单行注释
/*
多行注释
*/
标识符
标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(AZ和az)数字(0~9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。
保留字
Go 代码中会使用到的 25 个保留字
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
Go 语言还有 36 个预定义标识符
append bool byte cap close complex
complex64 complex128 uint16 copy false float32
float64 imag int int8 int16 uint32
int32 int64 iota len make new
nil panic uint64 print println real
recover string true uint uint8 uintptr
go Module
可以在任何位置创建你的Go语言项目
go mod init
编译
安装
跨平台性
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -v -ldflags '-w -s' -gcflags '-N -l' -o proxy main/main.go
goos
代表要变异的操作系统
goarch
代表编译的目标处理器架构
go env -w GOPROXY=https://goproxy.cn
强类型语言是一种强制类型定义的语言,一旦某一个变量被定义类型,如果不经过强制转换,则它永远就是该数据类型了,
- https://github.com/pibigstar/go-demo