Go 语言之 开发工具
一:Go语言介绍
Go 语言是什么
2009年11月10日,Go语言正式成为开源编程语言家庭的一员。
Go语言(或称Golang)是云计算时代的C语言。Go语言的诞生是为了让程序员有更高的生产效率,Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
开发人员在为项目选择语言时,不得不在快速开发和性能之间做出选择。C和C++这类语言提供了很快的执行速度,而 Ruby 和 Python 这类语言则擅长快速开发。Go语言在这两者间架起了桥梁,不仅提供了高性能的语言,同时也让开发更快速。
Go语言优势
-
可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了。
-
静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高。
-
语言层面支持并发,这个就是Go最大的特色,天生的支持并发。Go就是基因里面支持的并发,可以充分的利用多核,很容易的使用并发。
-
内置runtime,支持垃圾回收,这属于动态语言的特性之一吧,虽然目前来说GC(内存垃圾回收机制)不算完美,但是足以应付我们所能遇到的大多数情况,特别是Go1.1之后的GC。
-
简单易学,Go语言的作者都有C的基因,那么Go自然而然就有了C的基因,那么Go关键字是25个,但是表达能力很强大,几乎支持大多数你在其他语言见过的特性:继承、重载、对象等。
-
丰富的标准库,Go目前已经内置了大量的库,特别是网络库非常强大。
-
内置强大的工具,Go语言里面内置了很多工具链,最好的应该是gofmt工具,自动化格式化代码,能够让团队review变得如此的简单,代码格式一模一样,想不一样都很困难。
-
跨平台编译,如果你写的Go代码不包含cgo,那么就可以做到window系统编译linux的应用,如何做到的呢?Go引用了plan9的代码,这就是不依赖系统的信息。
-
内嵌C支持,Go里面也可以直接包含C代码,利用现有的丰富的C库。
Go 适合用来做什么
-
服务器编程,以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。
-
分布式系统,数据库代理器等。
-
网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用。
-
内存数据库,如google开发的groupcache,couchbase的部分组建。
-
云平台,目前国外很多云平台在采用Go开发,CloudFoundy的部分组建,前VMare的技术总监自己出来搞的apcera云平台。
二:Go语言开发环境和工具
go语言编译器: 官方地址:https://golang.google.cn/dl/
链接:https://pan.baidu.com/s/1twRPDRR_oKyfxQhwKqk1ag?pwd=20n2
提取码:20n2
VSCode:
链接:https://pan.baidu.com/s/1WWfdqU1nvNJJDxnFLCHEXw?pwd=4e9c
提取码:4e9c
go语言编译器安装
安装
安装,只要注意 go 的安装路径,其他全部默认,点击下一步即可
安装完毕后,进入到go 的安装路径。在安装目录下,有个bin 目录,这个go的命令存放目录
设置和修改环境变量
在自己想要的位置,新建文件夹goproject ,用于存放项目。在goproject 文件夹下,新建文件夹src ,用于存放源码
右击此电脑---->属性----->高级设置--->环境变量
在用户变量中,有GOPATH,这里定义的路径,是我们扩程序下载存放的目录。 以及在PATH 路径中,定义了go的执行文件,路径。
这两个我们都要删除
新建系统变量。变量名: GOROOT ,变量值:go的安装目录
修改Path 路径,将go 的安装目录下的 bin 目录,加入到Path路径中
****
新建系统变量GOPATH,这个是go的环境变量,设置项目,源码的存放路径。变量名为GOPATH ,变量值为新建的goproject目录的位置
使用win+r ,输入 cmd ,打开windows的命令行
使用go version 查看go 版本,如果能够看到go 的版本号,说明path 路径生效
使用go env 能够查看到go的环境变量。此时可以看到GOPATH和GOROOT的值都是我们之前设置的
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\Administrator\AppData\Local\go-build
set GOENV=C:\Users\Administrator\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=F:\goproject\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=F:\goproject
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.17.8
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=NUL
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\ADMINI~1\AppData\Local\Temp\go-build3145478798=/tmp/go-build -gno-record-gcc-switches
安装vscode
安装
在安装完毕,启动进入后,可以选择安装中文包
三 vs加载goproject项目,下载go扩展
文件--->打开文件夹(Open Folder....)--->找到 goproject目录---->打开文件夹
此时会自动加载src文件夹
点击左侧的扩展,然后搜go ,安装GO
回到资源管理,选中src,然后点击新建文件夹,文件夹名,如dev_code
然后继续选中,在dev_code下继续创建文件夹,如day1,然后继续选中,创建文件夹example1.
此时,创建的文件依次递进。在目录goproject 的src 目录下,也会依次生成目录
在example1 目录先,新建文件 text.go ,文件需要以 .go 扩展名结尾
创建完毕后,会跳出弹窗,要求下载 go扩展。 但是因为是从github上下载,所以不一定会成功。此时需要配置代理
go 的代理地址网站:https://goproxy.io/zh/
打开环境变量设置,新建系统变量
变量名: GOPROXY
变量值:https://proxy.golang.com.cn,direct
设置完代理后,关闭vscode,重新打开,然后会再次弹出下载go扩展,点击下载全部install all
此时,在输出 栏,会告诉你 下载一下的插件
需要看到All tools successfully installed. You are ready to Go :). 才下载完毕。如果有扩展没有下载下俩,可以关闭vscode,然后重新打开,会自动弹出对话框,要求下载,然后重新下载即可
如果go扩展插件下载,出现报错Error:无法解析不存在的文件 ,可以不用管它,只要最终出现All tools successfully installed. You are ready to Go :).即可
四:编写和打包第一个GO程序
编写程序
在test.go中,编写以下程序(输出hello world)
// 定义一个包,每个go文件都要归属于一个包
package main
//导入工具包,可以使用包中的方法,函数。实现相关的功能
//输出语句,属于fmt 包
import (
"fmt"
)
// 定义运行的主函数(每个程序都有主函数,是程序的唯一的入口。入口有且只有一个,出口可以有多个)
//函数名不可以乱写,必须是main
func main() {
//使用fmt包里的Println功能。print打印, ln 表示自动转行的功能
fmt.Println("hello world")
}
然后,按ctrl +s 保存。或者在 文件--->保存
运行程序
运行程序方法一:(使用扩展code runner)
扩展--->搜索code runner --->安装coderunner扩展
安装完毕后,返回test.go,页面,点击右上角的三角符号,运行程序。
运行程序方法二:(脚本方式运行)
在终端,以脚本的方式运行
进入到脚本所在的目录
cd .\src\dev_code\day1\example1\
ls
go run .\text.go
运行程序方法三(对程序脚本打包)
将脚本进行构建成程序,然后运行程序
go build .\src\dev_code\day1\example1\text.go
ls
.\text.exe
运行程序方法四(对程序所在目录打包)
当一个目录下有多个脚本文件时,我们可以直接对目录进行构建
// 对example1 目录进行构建
go build .\src\dev_code\day1\example1
对整个目录构建,报错go: go.mod file not found in current directory or any parent directory; see 'go help modules'
Package包波浪线说明:这是因为gomod和gopath两个包管理方案,并且相互不兼容
即使项目在GOPATH 定义的路径中,GO111MODULE=on 仍然强制使用Go模块。仍然需要go.mod才能正常工作
go env
//获取到的环境变量如下
set GO111MODULE=on
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\Administrator\AppData\Local\go-build
set GOENV=C:\Users\Administrator\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=F:\goproject\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=F:\goproject
set GOPRIVATE=
set GOPROXY=https://proxy.golang.com.cn,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.17.8
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=NUL
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\ADMINI~1\AppData\Local\Temp\go-build3492386364=/tmp/go-build -gno-record-gcc-switches
此时,我们可以关闭GO111MODULE
go env -w GO111MODULE=off
go env
//获取到的go 环境变量如下
set GO111MODULE=off
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\Administrator\AppData\Local\go-build
set GOENV=C:\Users\Administrator\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=F:\goproject\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=F:\goproject
set GOPRIVATE=
set GOPROXY=https://proxy.golang.com.cn,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.17.8
set GCCGO=gccgo
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\ADMINI~1\AppData\Local\Temp\go-build2414259400=/tmp/go-build -gno-record-gcc-switches
注意,项目要在GOPATH定义的目录中
再次构建整个目录
go build .\src\dev_code\day1\example1
ls
.\example1.exe
五 附录
GOPATH路径不生效
即使我们在系统变量里设置了GOPATH的路径,但是依旧不生效,使用go env 查看,获取到的结果也不是我们定义的
这是因为go 默认在用户 环境设置里 定义 GOPATH,并且,也在用户环境变量里 定义了PATH路径。这会覆盖系统变量。 我们需要 删除 用户环境设置里的 GOPATH以及用户环境变量里PATH变量里go 的那一部分
调整vscode的字体大小
文件--->首选项---->设置---->Font Size