一、go语言的基本介绍
1.概述
Go(又称 Golang)一种静态强类型、编译型语言。
Go 语言语法与 C 相近。
但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。
2.特点
天生支持并发(最显著特点)、跨平台编译、内置runtime,支持垃圾回收
3.应用领域
服务器编程、开发云平台、区块链、分布式系统、网络编程
二、安装和配置SDK (windows)
1.下载
官网 http://golang.org/ (无法打开)
go语言中文网 首页 - Go语言中文网 - Golang中文社区
2.windows下安装go
A 下载
解压后 放到d盘的go文件夹中。
bin目录下 go version 查看版本号
B. 配置环境变量
window下一步安装,会自动创建path和gopath
Path:命令行任意目录都可执行go命令
GOROOT:需要在环境变量中定义go的安装路径。
GOPATH:编写go项目代码的工作目录(使用gopath管理依赖使用)。
go在编译程序时(go build ),是基于goroot目录下编译的,会根据GOROOT去找相应的标准库。
当程序执行过程中,引入第三方包,是基于GOPATH目录下的文件寻找的。
通过go env 查看GOROOT和GOPATH,使用go mod管理依赖可以不用配置。
C 其他配置
查看配置:go env
打开gomod依赖:go env -w GO111MODULE=on (auto)
配置代理
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct
三、开发工具 GoLand 安装
1.下载安装
GoLand获取:idea.javatiku.cn/
2.相关配置
主题 setting font => consolas
自动格式化配置:tools => file watchers => goimport、gofmt
配置GOROOT 和 GOPATH
3.创建项目
创建go modules项目
环境设置为:https://goproxy.io,direct
4.运行第一个go程序
A 代码
B 执行run时
a. 编译再运行
go bulid hello.go => 生成 .exe文件直接执行,多次执行
go bulid -o myhello.exe hello.go
b.直接运行
go run hello.go => 直接输出结果,一次性执行
C 执行流程分析
go是编译型语言,php是解释型语言。
对源文件(.go文件) => go bulid 构建生成可执行的二进制文件(.exe) => 运行得出结果
.go文件 => 编译运行一步得出结果
D 编译运行流程的文件类型分析?????
5.快速生成代码片段
pkgm main包+main主函数
ff fmt.Printf("", var)
for for i := 0; i < count; i++ {}
forr for _, v := range v {}
fmain func main() {}
a.print! fmt.Printf("a: %v\n", a)
四、go程序开发注意事项
1.分号
每个语句不需要分号,go语言会在每行后自动加分号。
(所以“{”大括号不能单独成行)
2.大小写
go语言严格区分大小写。
(大小写对应包内成员的访问级别,privite,public)
3.引入包和定义的变量
引入的包和定义的变量必须在程序中有所使用,否则无法编译通过。
4.注释
有块注释与行注释,源代码推荐使用逐行注释。
5.代码规范
代码规范是良好的编程习惯,可以使用gofmt进行格式化规范。
~~资源文档
Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国
mysql package - github.com/go-sql-driver/mysql - Go Packages
五、包与模块(文件夹与go文件)
go应用使用包和模块来组织代码,包对应到文件系统就是文件夹,模块就是**.go **的go源文件。一个包中会有多个模块,或者多个子包。
1.概述
A 包的引入
开发中,需要在不同的文件中调用其他文件定义的函数,如main.go中调用utils.go中的函数。
同时,避免函数名重名的问题。
包的函数和全局变量通过大小写控制外部函数调用权限。
B 包的原理
一个包对应一个文件夹,文件夹内的go文件对应一个模块,模块内编写相应的函数。
go以包的形式管理文件和项目目录结构。
C 包的使用
package 包名。包内的每个模块文件首行,即完成对文件的打包。
import "包名"。其他文件使用时,先导入。
包名.函数名。访问函数时执行。
~~注意事项:
为了让其他包可以访问本包的函数,函数名首字母要大写。(go 大小写对应着访问权限)
可执行文件,包名要定义成main,main函数所在的文件夹下,包名为main;自定义库包名可以自定义,这是规范。
同一包下不能有相同的函数名,go不支持重载。
import包路径时,若采用gopath管理,则从gopath的对应目录下找。若采用mod管理,则从mod设置的目录下找。
六、go常用命令
直接在终端中输入 go help
即可显示所有的 go 命令以及相应命令功能简介,主要有下面这些:
- build: 编译包和依赖
- clean: 移除对象文件
- doc: 显示包或者符号的文档
- env: 打印go的环境信息
- bug: 启动错误报告
- fix: 运行go tool fix
- fmt: 运行gofmt进行格式化
- generate: 从processing source生成go文件
- get: 下载并安装包和依赖
- install: 编译并安装包和依赖
- list: 列出包
- run: 编译并运行go程序
- test: 运行测试
- tool: 运行go提供的工具
- version: 显示go的版本
- vet: 运行go tool vet
参考文档
https://golang.org/doc/cmd
七、GO语言的依赖管理(重要)
1.依赖概述
依赖的概念
依赖管理的三个阶段:go path、govendor、go mod
2.使用gopath工作目录管理项目(了解)
在GOPATH下,会有三个子目录:src、pkg和bin(自行创建),它们分别对应着源代码、编译后的库和可执行文件。
在使用Go语言开发项目时,需要将项目代码放在GOPATH/src目录下,并且引用的第三方库也需要放在GOPATH下。
go env 查看 GO111MODULE 开关状态,off表示使用gopath管理,on表示使用go mod管理。auto表示自动管理,有mod文件按照mod文件,没有mod文件按照gopath管理。
go env -w GO111MODULE=on
早期的go项目使用gopath来管理项目,三个文件夹需要手动创建,导入其他包都要放在该文件夹下,不方便而且容易出错,从 golang 1.11 开始使用gomod管理项目,当然还有第三方模块例如govendor。
~~Linux平台与mac平台安装
如果不是要在Linux平台敲go代码就不需要在Linux平台安装Go,我们开发机上写好的go代码只需要跨平台编译好之后就可以拷贝到Linux服务器上运行了,这也是go程序跨平台易部署的优势。
3.使用go mod来管理项目
高版本go项目已经不再依赖gopath来管理项目,使用go mod来管理项目。应用管理不在依赖 $GOPATH,可以在任意路径下创建项目。
A 流程步骤
a.设置go允许使用mod管理
go env 查看mod是否开启
go env -w GO111MODULE=on (auto)
b.在项目目录下创建mod文件
go mod init 项目名
在本地创建自定义的包,导入时其路径是“项目目/包所在路径”。
~~配置代理
国外网站会因为墙的问题导致下载依赖包失败,可以设置 go proxy 代理访问,direct 是默认不通过代理直接访问。
gitlab 私有仓库不支持默认的 https 下载,使用时需要手动下载下来,-insecure 仅支持 go get,表示不校验 https。
go get -insecure gitlab.com/xxxx
B 导入外部包
gin package - github.com/gin-gonic/gin - Go Packages
go get -u github.com/gin-gonic/gin
下载modules到本地cache:保存路径 $GOPATH/pkg/
go mod get -u github.com/gin-gonic/gin
go mod download