其实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. Lucene基础(四)-- 结合数据库使用

    需求 很多时候我们在用数据库的需要使用模糊查询,我们一般会使用like语句来做,然而这样的做的效率不是很多(很抱歉我们亲自去测,很多都这么说的),那么使用Lucene来检索的话,效率会高很多. luc ...

  2. PHP完整环境搭建

    Linux(CentOS 7)+ Nginx(1.10.2)+ Mysql(5.7.16)+ PHP(7.0.12) 首先安装Linux系统,我以虚拟机安装来做示例,先去下载 VitualBox,这是 ...

  3. display:inline-block的深入理解

    在使用 CSS 实现表现的时候,会经常接触到 display:inline-block 这一属性,无论是 初接触 Web 标准还是接触标准已久的朋友,大都会对这一属性感觉很迷惑和模糊. display ...

  4. 小米1S MIUI V5刷回V4教程

    V5确实很漂亮,但是1S只有1G的手机内存,确切说是760M左右的内存,所以运行V5卡的不行.解决小米手机刷回V4卡死在开机MI界面!! 于是,我想回到V4,虽然界面没有V5华丽,菜单没有V5扁平化, ...

  5. Ubuntu添加PPA源

    转自Ubuntu添加PPA源 什么是PPA PPA,表示Personal Package Archives,也就是个人软件包集 很多软件包由于各种原因吧,不能进入官方的Ubuntu软件仓库.为了方便U ...

  6. 实时时钟、系统时钟和CPU时钟的区别

    http://blog.sina.com.cn/s/blog_68f909c30100pli7.html 实时时钟:RTC时钟,用于提供年.月.日.时.分.秒和星期等的实时时间信息,由后备电池供电,当 ...

  7. 133. Clone Graph

    题目: Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. ...

  8. 【Linux远程管理】SSH协议远程管理

    SSH(Secure Shell)协议.命令行界面(CLI)下的远程管理工具,几乎所有的操作系统都有,区别于Telnet,SSH在进行数据传送时会对数据进行加密,所以SSH是比较安全的协议.几乎所有的 ...

  9. [Android] 修改设备访问权限

    在硬件抽象层模块中,我们是调用open函数来打开对应的设备文件的.例如,在2.3.2小节中开发的硬件抽象层模块freg中,函数freg_device_open调用open函数来打开设备文件/dev/f ...

  10. WCF - Creating WCF Service

    http://www.tutorialspoint.com/wcf/wcf_creating_service.htm Creating a WCF service is a simple task u ...