1. GoLang
1.1 特点介绍
Go 语言保证了既能达到静态编译语言的安全和性能,又达到了动态语言开发维护的高效率,使用一个表达式来形容 Go 语言:Go = C + Python , 说明 Go 语言既有 C 静态语言程序的运行速度,又能达到 Python 动态语言的快速开发。
- 从 C 语言中继承了很多理念,包括表达式语法,控制结构,基础数据类型,调用参数传值,指针等等,也保留了和 C 语言一样的编译执行方式及弱化的指针。
- 引入包的概念,用于组织程序结构,Go 语言的一个文件都要归属于一个包,而不能单独存在。
- 垃圾回收机制,内存自动回收,不需开发人员管理。
- 天然并发 (重要特点)。
从语言层面支持并发,实现简单。goroutine,轻量级线程,可实现大并发处理,高效利用多核。基于 CPS 并发模型实现。 - 吸收了管道通信机制,形成 Go 语言特有的管道channel ,通过管道 channel , 可以实现不同的goroute之间的相互通信。
- 函数可以返回多个值。
1.2 Go语言的应用场景
Go语言目前在云计算、容器虚拟化、分布式存储、网络爬虫、运维开发、Web开发、服务端开发、区块链、IoT等领域都有所应用。
以前你使用 C 或者 C++ 做的那些事情,用 Go 来做很合适,例如日志处理、文件系统、监控系统等,Go语言天生支持并发,所以十分适合编写分布式爬虫及大数据处理,大量优秀的Web框架如Echo、Gin、Iris、beego等都是go开发的,而且 Go 内置的 net/http 包十分的优秀,目前非常受欢迎的kubernetes、docker等也都是Go语言开发的。
Go语言在云计算、大数据、微服务、高并发领域应用应用非常广泛。Go语言由 Google公司开发,并于2009年开源,相比Java/python/c等语言,Go尤其擅长并发编程,性能堪比C语言,开发效率肩比Python, 被誉为“21世纪的C语言”。
1.3 下载安装
下载地址
然后一步步点击安装即可。
1.4 配置
需要新建两个环境变量配置
- 一个是 GOROOT ,这个就是 Go 环境所在目录的配置。
- 另一个是 GOPATH ,这个是 Go 项目的工作目录,你以后开发的代码就写在这个文件夹中。
然后将新建的GOROOT配置到 Path 环境变量中去,在系统变量中找到 Path,点击编辑->新建,输入%GOROOT%\bin,点击确定。并将所有母窗口的确定全部点下,确保环境变量生效。
windows+R 输入 cmd 打开终端,输入go version,如果输出如下图所示,则安装成功。
#查看Go版本
go version#查看Go环境变量
go env
1.5 配置 GO111MODULE、GOPROXY、GOSUMDB
Go默认的GOPROXY的值是:GOPROXY=https://proxy.golang.org,direct。
这个goproxy在使用go get安装第三方库的时候会报错,导致无法下载成功,所以必须要修改一下。
比如改为:
https://goproxy.io,direct (七牛镜像)
https://mirrors.aliyun.com/goproxy(阿里云镜像)
修改命令:
#开启mod模式(项目管理需要用到)
go env -w GO111MODULE=on
#重新设置成七牛镜像源(推荐)或阿里镜像源(用原有的会比较慢)
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy#关闭包的MD5校验
go env -w GOSUMDB=off#查看环境变量
go env
至此GoLang的安装和配置到此结束。
2. GoLand
对于使用过IDEA来说,GoLand的上手估计不会很难,很多人推荐VSCode,但是相比较而言,我还是更喜欢GoLand,因为相比较来说,GoLand更加地智能。
具体下载安装我就不说了,直接去下面地址下载,一路傻瓜式点击即可。
GoLand
2.1 GOROOT,GOPATH,GO模块配置
如果你按照我上面的方式配置好GoLang,这块只需要检查下没啥问题即可。
2.2 配置代理源
2.3 下载项目启动测试
我们可以在gitee上下载一个开源项目,然后尝试着安装依赖
# 进入server文件夹
cd server# 使用 go mod 并安装go依赖包
go generate
这里我需要解释下,go mod也就是Go Modules,它是官方依赖管理工具,提供了一种在项目中管理外部依赖包的方式,包括版本控制、依赖解析和构建时的依赖下载,类似于JAVA下的Maven。
我们需要注意的是go generate
它主要用于源代码生成,而不是直接管理模块依赖。
- go generate 是一个辅助工具,用于触发自定义的代码生成任务。
- 在源代码文件中使用
//go:generate
注释来指定需要执行的命令和参数,当运行go generate
时,Go 工具链会查找并执行这些注释中的命令。
我们可以很清楚地看到,在我拉的项目的主方法中,利用了go generate
来去统一执行所有的命令,我们也可以在平时的开发中仿照这样一种写法。
go mod常见的命令:
初始化模块:
go mod init [module-name]
该命令用于创建一个新的go.mod文件,初始化一个Go模块。它会定义模块的根目录和模块路径。如果不指定模块名,默认使用当前目录作为模块的根,并尝试从代码中推断模块路径。
下载依赖:
go mod download [modules...]
此命令用于下载指定的模块及其依赖项到本地缓存。如果未指定任何模块,则下载主模块的所有依赖。
更新并优化依赖关系:
go mod tidy
这个命令会根据当前源码中的导入声明自动添加新的依赖,并移除不再使用的依赖项。它确保go.mod和go.sum文件反映项目的真实需求。
将依赖复制到vendor目录:
go mod vendor
此命令会把项目所有构建时所需的依赖包拷贝到vendor目录下,使得即使没有网络连接或代理设置也可以进行构建。
验证模块依赖:
go mod verify
验证go.mod文件中列出的模块哈希值是否与go.sum中记录的哈希一致,确保依赖的安全性。
更换下载源:
go env -w GOPROXY=https://proxy.example.com
设置GOPROXY环境变量以更改依赖下载源。这允许开发者选择自定义或者镜像代理来加速模块下载或者解决访问问题。
构建时使用vendor目录:
go build -mod=vendor
当vendor目录存在时,这个标志告诉go build命令在构建过程中优先使用vendor目录下的依赖,而不是检查全局或本地模块缓存。
获取依赖详情:
go list -m all
列出项目所有直接和间接依赖的模块版本信息。
2.4 最后启动项目
或者执行
go build -o server main.go