其实golang的工程管理还是挺简单的,完全使用目录结构还有package名来推导工程结构和构建顺序。

当然,首先要说的是环境变量$GOPATH,项目构建全靠它。这么说吧,想要构建一个项目,就要将这个项目添加到$GOPATH中,多个项目用";"分隔。

Golang项目目录下一般有三个子目录:

  • src存放源代码
  • pkg编译后生成的文件
  • bin编译后生成的可执行文件

我们重点要关注的其实就是src文件夹中的目录结构。

举个例子比啥都强,目录结构如下:

<proj>
|--<src>
|--<a>
|--<a1>
|--al.go
|--<a2>
|--a2.go
|--<b>
|--b1.go
|--b2.go
|--<c>
|--c.go
|--<pkg>
|--<bin>

各文件代码:

a1.go

 package a1

 import "fmt"

 func PrintA1(){
fmt.Println("a/a1")
}

a2.go

package a2

import "fmt"

func PrintA2(){
fmt.Println("a/a2")
}

b1.go

package b

 import "fmt"

 func printB1(){
fmt.Println("b.b1")
}

b2.go

 package b

 import "fmt"

 func PrintB(){

    printB1()
fmt.Println("b.b2")
}

注意b1.go b2.go中的包并且是相同的,也就是说同一个目录下面只允许一个包

c.go

 package main

 import(
"a/a1"
"a/a2"
"b"
)
func main(){
a1.PrintA1()
a2.PrintA2()
b.PrintB()
}

将proj加入$GOPATH:

在windows下有个问题要注意,就是中文路径问题,如果proj路径有中文,那么在编译的时候可能出问题,我被这个问题折磨了半个多小时,左右挑不出错,就是不能编译。

go build a/a1
go install a/a1
go build a/a2
go install a/a2
go build b
go install b go build c
go install c

执行相关命令。

可以看到pkg文件夹下生成了,a文件夹、b.a,a文件夹下有a1.a、a2.a

bin文件夹下有c.exe(当然,在执行go build c的位置也存在c.exe)

运行下c.exe

可以看出,分门别类,非常清楚。

其实b文件夹下的两个.go文件完全可以合并成一个的,没有任何影响。

package中的名称最好与目录名一样,这样在import的时候直接import目录名就好了。如果两者不一致,例如上面的b1.go、b2.go里面的package是package bbbbb,则在c.go里import的时候要import "b",然后下面的b.PrintB(),则需要改为bbbbb.PrintB()

go项目的目录结构我感觉说得挺明白的了。

Golang项目目录结构组织的更多相关文章

  1. 求推荐go语言开发工具及go语言应该以哪种目录结构组织代码?

    go语言的开发工具推荐? go语言开发普通程序及开发web程序的时候,应该以哪种目录结构组织代码? 求推荐go语言开发工具及go语言应该以哪种目录结构组织代码? >> golang这个答案 ...

  2. Laravel项目目录结构说明

    Laravel项目目录结构说明: |- vendor 目录包含你的 Composer 依赖模块及laravel框架. |- bootstrap 目录包含几个框架启动跟自动加载配置的文件. |- app ...

  3. MVVM 模式下iOS项目目录结构详细说明

    ➠更多技术干货请戳:听云博客 我们在做项目的时候,会经常用到各种设计模式,最常见的要数 MVC (模型,视图,控制器)了.但是,今天我们要说的是另一种设计模式——MVVM. 所以 MVVM 到底是什么 ...

  4. 1-5Tomcat 目录结构 和 web项目目录结构

    对应我的安装路径: web项目目录结构

  5. Android开发学习之路--Android Studio项目目录结构简介

    既然已经搭建好环境了,那就对Android Studio中项目目录结构做个简单的了解了,这里以最简单的Hello工程为例子,新建好工程后看如下三个工程视图: 1.Android工程 manifests ...

  6. 【Android Studio安装部署系列】三、Android Studio项目目录结构

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 简单介绍下Android studio新建项目的目录结构. 常用项目结构类型 在Android Studio中,提供了以下几种项目结 ...

  7. vue项目目录结构

    VUE项目目录结构 如上图所示,我们的目录结构就是这样的了. 目录/文件 说明 build 这个是我们最终发布的时候会把代码发布在这里,在开发阶段,我们基本不用管. config 配置目录,默认配置没 ...

  8. iOS开发总结——项目目录结构

    1.前言 清晰的项目目录结构有利于项目的开发,同时也是软件架构的一部分,所以,项目开发之初搭建项目的目录结构很重要.刚转iOS时,自己并不知道如何搭建App的项目目录,在参与开发两个应用后,结合Web ...

  9. React脚手架创建一个React应用以及项目目录结构详解

    react脚手架 用来帮助程序员快速创建一个基于xxx库的模板项目,包含了所有需要的配置,指定好了所有的依赖,可以直接安装/编译/运行一个简单效果 react提供了一个专门用于创建react项目的脚手 ...

随机推荐

  1. 【一起学OpenFOAM】04 OpenFOAM的学习资源

    OpenFOAM的学习资料并不多,个人猜测也许是与软件的类型有关系. 对于商用软件来讲,由于要占领市场,软件开发商自然是巴不得会用软件的人越多越好,因为他们卖的是软件,会用的人越多,软件卖得越好.他们 ...

  2. python 常用模块(转载)

    转载地址:http://codeweblog.com/python-%e5%b8%b8%e7%94%a8%e6%a8%a1%e5%9d%97/ adodb:我们领导推荐的数据库连接组件bsddb3:B ...

  3. Python属性、方法和类管理系列之----__slots__属性

    一句话说明 __slots__是用来限制实例的属性的,__slots__可以规定实例是否应该有__dict__属性:__slots__不能限制类的属性. 只有__slots__列表内的这些变量名可赋值 ...

  4. win10应用安装位置修改方法

    win10应用安装位置怎么改?很多用户升级win10的系统之后,对于win10应用装置的位置如何修改一直不知道如何解决,今天,小编就跟大家一起来看看如何修改win10应用装置的位置. win10应用安 ...

  5. 换一换js

    (function(){ var tit = $("#changes"), con = $("#wday>ul"), page = con.length, ...

  6. 再写FFT模板

    没什么好说的,今天又考了FFT(虽然不用FFT也能过)但是确实有忘了怎么写FFT了,于是乎只有重新写一遍FFT模板练一下手了.第一部分普通FFT,第二部分数论FFT,记一下模数2^23*7*17+1 ...

  7. Codeforces Round #230 (Div. 2) C Blocked Points

    题目链接 题意 : 给你一个半径为n的圆,圆里边还有圆上都有很多整点,让你找出与圆外的任意一个整点距离等于1的点. 思路 :这个题可以用枚举,画个图就发现了,比如说先数第一象限的,往下往右找,还可以找 ...

  8. POJ 2195 Going Home(最小费用最大流)

    http://poj.org/problem?id=2195 题意 :  N*M的点阵中,有N个人,N个房子.让x个人走到这x个房子中,只能上下左右走,每个人每走一步就花1美元,问当所有的人都归位了之 ...

  9. activiti集成spring异常(DbSqlSession)

    在eclipse配置一个简单的activiti项目,配置的是mysql数据库,报错如下: SLF4J: Failed to load class "org.slf4j.impl.Static ...

  10. keytool 错误: java.io.FileNotFoundException: 拒绝访问

    keytool 错误: java.io.FileNotFoundException: 拒绝访问 打开命令行,切换到D:\AndroidStudioProjects\MyApplication\app目 ...