Golang项目目录结构组织
其实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项目目录结构组织的更多相关文章
- 求推荐go语言开发工具及go语言应该以哪种目录结构组织代码?
go语言的开发工具推荐? go语言开发普通程序及开发web程序的时候,应该以哪种目录结构组织代码? 求推荐go语言开发工具及go语言应该以哪种目录结构组织代码? >> golang这个答案 ...
- Laravel项目目录结构说明
Laravel项目目录结构说明: |- vendor 目录包含你的 Composer 依赖模块及laravel框架. |- bootstrap 目录包含几个框架启动跟自动加载配置的文件. |- app ...
- MVVM 模式下iOS项目目录结构详细说明
➠更多技术干货请戳:听云博客 我们在做项目的时候,会经常用到各种设计模式,最常见的要数 MVC (模型,视图,控制器)了.但是,今天我们要说的是另一种设计模式——MVVM. 所以 MVVM 到底是什么 ...
- 1-5Tomcat 目录结构 和 web项目目录结构
对应我的安装路径: web项目目录结构
- Android开发学习之路--Android Studio项目目录结构简介
既然已经搭建好环境了,那就对Android Studio中项目目录结构做个简单的了解了,这里以最简单的Hello工程为例子,新建好工程后看如下三个工程视图: 1.Android工程 manifests ...
- 【Android Studio安装部署系列】三、Android Studio项目目录结构
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 简单介绍下Android studio新建项目的目录结构. 常用项目结构类型 在Android Studio中,提供了以下几种项目结 ...
- vue项目目录结构
VUE项目目录结构 如上图所示,我们的目录结构就是这样的了. 目录/文件 说明 build 这个是我们最终发布的时候会把代码发布在这里,在开发阶段,我们基本不用管. config 配置目录,默认配置没 ...
- iOS开发总结——项目目录结构
1.前言 清晰的项目目录结构有利于项目的开发,同时也是软件架构的一部分,所以,项目开发之初搭建项目的目录结构很重要.刚转iOS时,自己并不知道如何搭建App的项目目录,在参与开发两个应用后,结合Web ...
- React脚手架创建一个React应用以及项目目录结构详解
react脚手架 用来帮助程序员快速创建一个基于xxx库的模板项目,包含了所有需要的配置,指定好了所有的依赖,可以直接安装/编译/运行一个简单效果 react提供了一个专门用于创建react项目的脚手 ...
随机推荐
- 【存储器相关】RAM、SRAM、SDRAM、ROM、EPROM、EEPROM、Flash存储器区别
常见存储器概念:RAM.SRAM.SDRAM.ROM.EPROM.EEPROM.Flash存储器可以分为很多种类,其中根据掉电数据是否丢失可以分为RAM(随机存取存储器)和ROM(只读存储器),其中R ...
- require backbone 移动
http://www.gafish.net/archives/1422 http://www.w3ctech.com/2012/mobile/schedule http://cavenfeng.ite ...
- C语言预处理运算符
转自C语言预处理运算符 预处理还需要运算符?有没有搞错? ^_^, 没有搞错,预处理是有运算符,而且还不止一个: #(单井号) -- 字符串化运算符. ##(双井号 )-- 连接运算符 #@ ...
- ASP.net Application及Session 的start end 方法总结
经过几天的摸索,试验,今天终于可以将Application及Session对象的Start和End方法做下总结了. Application_start: 第一个访问网站的用户会触发该方法. 通常会在该 ...
- 关于Failed to convert property value of type [org.quartz.impl.StdScheduler] to required type [org.springframework.scheduling.quartz.SchedulerFactoryBean
在一个业务类有下列属性 private SchedulerFactoryBeanscheduler; public SchedulerFactory BeangetScheduler() { retu ...
- [状压dp]POJ1185 炮兵阵地
中文题 题意不再赘述 对于中间这个“P” 根据dp的无后效性 我们只需考虑前面的 就变成了 只需考虑: 也就是状压前两行 具体与HDOJ的4539类似: 看HDOJ 4539 仅仅是共存状态的判断不同 ...
- yii 验证器和验证码
http://www.yiiframework.com/doc/api/1.1/CCaptcha http://www.cnblogs.com/analyzer/articles/1673015.ht ...
- 用U盘安装系统2
这种方式USB启动盘制作成功之后是可以往里面存放任何资料的,我喜欢用这一种 首先,在网站上下载一个你想要装的系统 (百度一下优优系统,大地系统,深度技术,MSDN我告诉你,都可以,看你自己喜欢了) 例 ...
- 结构体typedef struct dtuple_struct dtuple_t;
/** Structure for an SQL data tuple of fields (logical record) */ struct dtuple_struct { ulint info_ ...
- boundingRectWithSize 的使用, 计算UILable高度, 包含Emoji及多属性string.
iOS的文字高度计算一直是个问题, 苹果也一直在改, 这几天看了一下 boundingRectWithSize 方法. - (CGRect)boundingRectWithSize:(CGSize)s ...