GO项目目录下bin,pkg,src从何而来

之前有学过一段时间Go语言,前几天忽然发现我的GoPath目录下居然只有src,pkg两个文件夹,那么我的bin文件夹去哪里了呢,仔细看了一下终于发现问题之所在,以下简单介绍一下解决办法。

|– bin 放编译后的可执行文件,可执行文件名字与源代码文件名字一样
|– pkg 放编译后的包文件,包文件名字与所在目录一样,注意:名字与 package 无关
|– src 放源代码文件

GoPath文件结构如下

D:.
├─bin
│ test.exe

├─pkg
│ └─windows_amd64
│ mymath.a

└─src
├─mymath
│ mymath.go

└─test
test.go

src目录

此目录是自己在GoPath目录下手动创建的,用于放源代码文件。

  • 手动在GoPtah目录下添加src目录,如图:
  • 新建两个文件夹mymath,test,分别添加mymath.go,test.go.
    结构如下:
    ├─mymath
    │ mymath.go

    └─test
    test.go
1
2
3
4
5
6
//mymath.go
package math
func Mymath(a int,b int) int {
return a * b
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//test.go
package main
import(
"fmt"
"mymath"
)
func main() {
a := 100
b := 200
fmt.Println(math.Mymath(a,b))
}

pkg目录

此目录是在src的源文件目录下对.go文件通过go install之后自动生成的,放编译后的包文件。由于在尝试过程中我暂时没有发现pkg录出现像bin目录那样不会自动生成的情况,所以这步暂时没有问题。

  • src/maymath目录下打开cmder运行go install命令,可以发现 GoPath目录下自动生成了pkg目录。如图

  • src/test目录下打开 cmder运行go build命令,可以发现 GoPath目录下并没有自动生成了bin目录,而是在当前目录下生成了test.exe。如图

bin目录

此目录是在src的源文件目录下对 .go文件通过go buildgo install之后自动生成的,.go文件要调用pkg下的包文件。那么问题来了,bin目录有时候就不会生成,最后我才发现是环境变量GOBIN的原因。废话不多说直接上图。

  • 查看GO环境变量

  • 找到GOBIN环境变量删除

  • 查看修改后的GO环境变量

  • 删除test/test.exe,在当前目录下打开cmder运行
    go install,查看GoPath目录结构即可发现bin已自动生成,如图:

Go环境变量配置

  • GOROOT:Go的安装目录
  • GOPATH:用于存放Go语言Package的目录,这个目录不能在Go的安装目录中
  • GOBIN:Go二进制文件存放目录,写成%GOROOT%\bin就好
  • GOOS:操作系统
  • GOARCH:指定系统环境,i386表示x86,amd64表示x64
  • PATH:需要将%GOBIN%加在PATH变量的最后,方便在命令行下运行Go
  • 其他GO环境变量可以用cmd命令查询

更多资料

Golang项目目录结构组织
GO环境配置

注:以上提到的cmder是一个cmd工具,详细请查看前面的文章