编写一个hello world程序, 并可以运行它
go语言有2种工程结构:
我们这里先讲解GOPATH工程结构, 等后面引入包的概念后再开始使用GO MODULE工程结构, 而Go1.16默认使用的GO MODULE工程结构, 因此我们需要修改下设置
go env -w GO111MODULE=auto
工作目录是一个工程开发的相对参考目录, GOPATH工程结构中的工作目录就是GOPATH变量指向的目录 我们可以通过GOPATH这个变量查看当前设置的工作目录
$ go env GOPATH // 通过go env 可以查看go语言设置相关的所有变量
E:\Golang // 这是我的工作目录
Go语言规定了工作目录的目录结构:
以上 $GOPATH 目录约定有三个子目录:
如果你的这3个目录不存在请提前创建
mkdir bin pkg src
使用vscode打开你的工作目录
我们在src下编写我们的第一个Go程序: hello.go
package main
import "fmt"
func main() {
fmt.Println("hello world, this is my first golang program!")
}
解读:
$ go run src/day1/hello.go
hello world, this is my first golang program!
go run:用于直接运行程序, 编译和运行一个Go的main包
go build -o day1/hello.exe day1/hello.go // 编译hello.go, 输出二进制目标文件hello.exe
./day1/hello.exe // 运行编译好的hello.exe
hello world, this is my first golang program!
go build: 用于编译&链接程序或包
常用参数说明:
我们可以通过go env 打印当前Go运行的所有环境变量配置
$ go env
set GO111MODULE=auto
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\yumaojun\AppData\Local\go-build
set GOENV=C:\Users\yumaojun\AppData\Roaming\go\env
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=E:\Golang\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=E:\Golang
set GOPRIVATE=
set GOPROXY=https://goproxy.cn
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.16.4
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 -fmessage-length=0 -fdebug-prefix-map=C:\Users\yumaojun\AppData\Local\Temp\go-build483455790=/tmp/go-build -gno-record-gcc-switches
读取环境变量的值: go env <ENV_NAME>
go env GO111MODULE
设置环境变量的值: go env -w <ENV_NAME>=<ENV_VALUE>
go env -w GO111MODULE=auto
go tool 是一组工具集, 支持很多子命令:
$ go tool
addr2line
api
asm
buildid
cgo
compile // 编译源代码, 生成静态库或者目标文件
cover
dist
doc
fix
go_bootstrap
link // 链接目标文件和目标文件依赖的静态库 生成最终的可执行二进制文件
nm
objdump
pack
pprof
test2json
trace
vet
我们使用go tool 提供的 compile 和 link 来手动编译一个程序, 这有助于你更好的理解编译的过程
我们在day1下面创建一个compile目录, 用于存放我们这次演示的项目代码
mkdir day1/compile
然后我们先编写pkg包: day1/compile/pkg/demo.go
package pkg
import "fmt"
func Demo() {
fmt.Println("This is demo for go install")
}
接下来我们需要编写我们的mian包(程序入口): day1/compile/main.go
package main
import "day1/compile/pkg"
func main() {
pkg.Demo()
}
go env -w GO111MODULE=auto // 为了让go install 命令能正常生成静态库到pkg目录下, 我们首先需要关闭go mod
go install day1/compile/pkg // 使用go install 安装依赖包, 安装过后静态库会放置到 GOPATH下的pkg/<platform>下
cd /day1/compile // 切换到compile目录下 进行编译与链接
go tool compile -I /e/Golang/pkg/windows_amd64 main.go // 编译原文件, 指定静态库搜索目录
go tool link -o main.exe -L /e/Golang/pkg/windows_amd64/ main.o // 将目标文件和静态库链接成一个二进制可执行文件
./main.exe
go get 用于拉去外部依赖的包或者工具, 如果是Mod项目, 并将依赖添加至 go.mod中
go get 相当于执行了如下命令:
关键参数: -d: 只拉去源码, 不执行 go install <在未来的版本中 该选项默认开启>
外部依赖的包的源码会放置到GOPATH的src下面, 而可执行文件将会编译安装到GOPATH的bin下面
我们之前在安装vscode go的扩展工具时安装了gopls
go get -v golang.org/x/tools/gopls
如下是gopls的源码存放位置
如下下gopls的二进制文件存放位置
go install 用于编译和安装二进制文件
这个命令是用来移除当前源码包和关联源码包里面编译生成的文件
ls /e/Golang/pkg/windows_amd64/demo
go clean -i -n
代码格式化
语法静态检查
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。