安装其实没有什么好说的,我们一路next,采用默认安装,安装在C:\Go下。在安装的时候,会自动在系统环境变量里新建一个 GOROOT 环境变量,还会自动把 PATH 环境变量设置好
GO代码必须在工作空间内。
工作空间是一个目录,其中包含三个子目录:
src ---- 里面每一个子目录,就是一个包。包内是Go的源码文件
pkg ---- 编译后生成的,包的目标文件
bin ---- 生成的可执行文件。
这里,我们建立D:\GOBUILD\GOPATH(可以不是GOPATH, 任意名字都可以)的文件夹,
然后再建立三个子文件夹(子文件夹名必须为src、pkg、bin)。
安装包不会帮我们添加的,就是这个GOPATH环境变量了。
我将变量值设为:【D:\GOBUILD\GOPATH】
goroot一般是全局性的,gopath与gobin,通过环境变量设置可以设置全局gopath,在任意路径下执行go build,会优先查找全局gopath下的src目录内的go文件进行编译。go get命令也会将go编译过程中所需要的依赖包下载到gopath里(package目录),编译生成的exe文件,默认放在gopath的bin目录下。
用goland工具建立的项目时,可以为每一个Project配置gopath目录,这个项目在编译时,如果按照package编译,会查找本项目内的package进行编译。
go的安装目录(/usr/local/go)
go工作环境中常常用到的一个很重要的环境变量。
GOPATH的值可以是一个目录的路径,也可以是包含多个目录的路径,每个目录都代表Go语言的一个工作区(workspace)。一般情况下,为了分离自己与第三方的代码,我们会设置两个或更多的工作区。当有多个GOPATH时,默认会将go get的内容放在第一个目录下。
工作区用于放置Go语言的源码文件,以及安装(install)后的归档文件(archive file,也就是以".a"为扩展名的文件)和可执行文件(executable file)。
Go语言项目在其生命周期内的所有操作(编码,依赖管理,构建,测试,安装等)基本上都是围绕GOPATH和工作区进行的。
Go 语言提供的很多工具都是在 GOPATH 和工作区的基础上运行的,例如go build,go install,go get。
GOPATH约定有三个子目录
src 存放源代码
pkg 存放编译后生成的文件
bin 编译后生成的可执行文件
不允许设置多个路径,可以不设置。为空时遵循约定由于配置原则,可执行文件放置各自GOPATH目录的bin文件夹中。
当设置多个GOPATH时,可以用“export PATH= P A T H : PATH: PATH:{GOPATH///bin:}/bin”把每个GOPATH下的bin都加入到PATH中。
1、一般来说,建议包名和目录名保持一致,所以,在src文件夹下,按照你想要创建的包名,组织文件夹路径。这里,我们在D:\GOBUILD\GOPATH\src下面,建立hello文件夹
关于包,根据本地测试得出以下几点:
文件名与包名没有直接关系,不一定要将文件名与包名定成同一个。
文件夹名与包名没有直接关系,并非需要一致。
同一个文件夹下的文件只能有一个包名,否则编译报错。
2、新建go代码
D:\GOBUILD\GOPATH\src\hello下面,建立helloworld.go文件,并编辑,加入如下代码:
package main
import(
"fmt"
"time"
)
func main() {
fmt.Println("Hello world!")
duration := time.Duration(10)*time.Second
time.Sleep(duration)
}
3、编译生成go程序
打开命令行,在任意文件路径下,运行:
go install hello
也可以进入项目(应用包)的路径,然后运行:
go install
在编译生成go程序的时,go实际上会去两个地方找程序包:
GOROOT下的src文件夹下,以及GOPATH下的src文件夹下。
在程序包里,自动找main包的main函数作为程序入口,然后进行编译。
如果想编译不在全局gopath中的项目helloworld,直接用命令行在helloworld项目文件目录helloworld\src\main下执行:go install helloworld
4、运行go程序
在D:\gopath\bin\下,会发现出现了一个hello.exe的可执行文件,双击运行:
OK!成功!运行10秒后,程序自动退出~
go install/build都是用来编译包和其依赖的包。
区别:
go build只对main包有效,在当前目录编译生成一个可执行的二进制文件(依赖包生成的静态库文件放在 G O P A T H / p k g ) 。 g o i n s t a l l 一 般 生 成 静 态 库 文 件 放 在 GOPATH/pkg)。 go install一般生成静态库文件放在 GOPATH/pkg)。goinstall一般生成静态库文件放在GOPATH/pkg目录下,文件扩展名a.只对main包有效,在当前目录编译生成一个可执行的二进制文件(依赖包生成的静态库文件放在 G O P A T H / p k g ) 。 g o i n s t a l l 一 般 生 成 静 态 库 文 件 放 在 GOPATH/pkg)。 go install一般生成静态库文件放在 GOPATH/pkg)。goinstall一般生成静态库文件放在GOPATH/pkg目录下,文件扩展名a.如果为main包,则会在 G O P A T H / b i n 生 成 一 个 可 执 行 的 二 进 制 文 件 。 , 则 会 在 GOPATH/bin 生成一个可执行的二进制文件。,则会在 GOPATH/bin生成一个可执行的二进制文件。,则会在GOPATH/bin 生成一个可执行的二进制文件。
安装JetBrains GoLand,过程略
配置goland
文件(file)->配置(settings)->go
新建项目HelloWorld,位置可以放在gopath的src中。
项目下新建Hello.go文件,代码同上:
package main
import(
"fmt"
"time"
)
func main() {
fmt.Println("Hello world!")
duration := time.Duration(10)*time.Second
time.Sleep(duration)
}
运行(run)菜单->运行->编辑配置
左上+号,go build
一共有三种配置,每种的设置是不一样的,
按目录编译要求指定目录下要有main包声明和main函数,否则无法编译。
这种要求在goland中设置project gopath:
file->settings->Go->GOPATH->PROJECT GOPATH中添加当前项目工程的路径。
运行,编辑配置,新增go build配置,这里package path要设成helloworld项目名,就是要求软件在本项目中找文件进行编译,输出目录随意,一般设为项目的bin目录
运行,编译
按package编译不要求有main包声明,可以声明别的包名,也可以不放在main文件中,但要有main函数
按文件编译,go文件必须放在包名main文件夹中,指定要编译的文件,此处可以编译多个文件,但必须有一个带main函数
编译完成,运行即可
GO MODULE不再受GOPATH的限制可以自由编译和包管理。
(https://goframe.org/prepare/gomodule)
Golang 的包管理一直被大众所诟病的一个点, 在 1.5 版本之前,所有的依赖包都是存放在 GOPATH 下,没有版本控制。这个类似 Google 使用单一仓库来管理代码的方式。这种方式的最大的弊端就是无法实现包的多版本控制,1.5 版本推出了 vendor 机制。go build 的时候会先去 vendor 目录查找依赖,如果没有找到会再 GOPATH 目录下查找。1.9 版本推出了实验性质的包管理工具 dep,1.11 版本推出 modules 机制,简称 mod。modules 的原型其实是 vgo
modules 在 Go 1.13 的版本下是默认开启的。