Go项目的目录结构

项目目录结构如何组织,一般语言都是没有规定。但Go语言这方面做了规定,这样可以保持一致性

1、一般的,一个Go项目在GOPATH下,会有如下三个目录:

|--bin
|--pkg
|--src

其中,bin存放编译后的可执行文件;pkg存放编译后的包文件;src存放项目源文件。一般,bin和pkg目录可以不创建,go命令会自动创建(如 go install),只需要创建src目录即可。
对于pkg目录,曾经有人问:我把Go中的包放入pkg下面,怎么不行啊?他直接把Go包的源文件放入了pkg中。这显然是不对的。pkg中的文件是Go编译生成的,而不是手动放进去的。(一般文件后缀.a)
对于src目录,存放源文件,Go中源文件以包(package)的形式组织。通常,新建一个包就在src目录中新建一个文件夹。

2、举例说明

比如:我新建一个项目,test,开始的目录结构如下:

test--|--src

为了编译方便,我在其中增加了一个install文件,目录结构:

test/
|-- install
`-- src

其中install的内容如下:(linux下)

#!/usr/bin/env bash

if [ ! -f install ]; then
echo ‘install must be run within its container folder‘ 1>&2
exit 1
fi

CURDIR=`pwd`
OLDGOPATH="$GOPATH"
export GOPATH="$CURDIR"

gofmt -w src

go install test

export GOPATH="$OLDGOPATH"

echo ‘finished‘

之所以加上这个install,是不用配置GOPATH(避免新增一个GO项目就要往GOPATH中增加一个路径)

接下来,增加一个包:config和一个main程序。目录结构如下:

test
|-- install
`-- src
    |-- config
    |   `-- config.go
    `-- test
        `-- main.go

注意,config.go中的package名称必须最好和目录config一致,而文件名可以随便。main.go表示main包,文件名建议为main.go。(注:不一致时,生成的.a文件名和目录名一致,这样,在import 时,应该是目录名,而引用包时,需要包名。例如:目录为myconfig,包名为config,则生产的静态包文件是:myconfig.a,引用该包:import “myconfig”,使用包中成员:config.LoadConfig()

config.go和main.go的代码如下:
config.go代码

package config

func LoadConfig() {

}

main.go代码

package main

import (
    "config"
    "fmt"
)

func main() {
    config.LoadConfig()
    fmt.Println("Hello, GO!")
}

接下来,在项目根目录执行./install

这时候的目录结构为:

test
|-- bin
|   `-- test
|-- install
|-- pkg
|   `-- linux_amd64
|       `-- config.a
`-- src
    |-- config
    |   `-- config.go
    `-- test
        `-- main.go
(linux_amd64表示我使用的操作系统和架构,你的可能不一样)

其中config.a是包config编译后生成的;bin/test是生成的二进制文件

这个时候可以执行:bin/test了。会输出:Hello, GO!

3、补充说明

1)包可以多层目录,比如:net/http包,表示源文件在src/net/http目录下面,不过源文件中的包名是最后一个目录的名字,如http
而在import包时,必须完整的路径,如:import “net/http”

2)有时候会见到local import(不建议使用),语法类似这样:

import “./config”

当代码中有这样的语句时,很多时候都会见到类似这样的错误:local import “./config” in non-local package

我所了解的这种导入方式的使用是:当写一个简单的测试脚本,想要使用go run命令时,可以使用这种导入方式。
比如上面的例子,把test/main.go移到src目录中,test目录删除,修改main.go中的import “config”为import “./config”,然后可以在src目录下执行:go run main.go

可见,local import不依赖于GOPATH

4、Windows下的install.bat

@echo off

setlocal

if exist install.bat goto ok
echo install.bat must be run from its folder
goto end

:ok

set OLDGOPATH=%GOPATH%
set GOPATH=%~dp0

gofmt -w src

go install test

:end
echo finished
时间: 2024-08-29 12:32:59

Go项目的目录结构的相关文章

Android下apk安装的过程,安卓项目的目录结构

安卓下软件安装的过程: 1:拷贝XXX.apk到/data/app/XXX-1.apk 2.在/data/data目录下创建一个文件夹     文件夹名称  当前应用程序的包名. 安卓项目的目录结构: bin:编译后的文件目录 gen:自动生成的文件目录 project.properties:代表编译的版本 对应Android.jar的版本 res:资源目录 drawable:存放应用程序的图标 h :高分辨率(以此类推) x:特大分辨率

Go 项目的目录结构 及 安装技巧

项目目录结构如何组织,一般语言都是没有规定.但Go语言这方面做了规定,这样可以保持一致性 1.一般的,一个Go项目在GOPATH下,会有如下三个目录: |--bin |--pkg |--src 其中,bin存放编译后的可执行文件:pkg 存放编译后的包文件:src 存放项目源文件.一般,bin 和 pkg 目录可以不创建,go 命令会自动创建(如 go install),只需要创建src目录即可. 对于 pkg 目录,曾经有人问:我把 Go 中的包放入 pkg 下面,怎么不行啊?他直接把 Go

Android Studio初体验之揭秘AS的项目的目录结构

(因为是初步,难免有错误出现,如果哪里记录的有问题,欢迎各位指正,共同成长) 我们默认你的AS是已经安装并好的,关于AS的安装,网上一大把,请各位自行寻找资源 下面记录一些配置以及AS的项目的目录结构 配置: 1.config:用户的配置文件,保存用户的个人设置(你所设置的所有的熟悉,注意备份,就不会一次次去设置)   2.restart:不用关心   3.system:运行的生成的缓存环境(会越来越大) ①考虑配置在磁盘空间大的磁盘中 ②可以删除,但是第一次使用的时候会初始化一些数据 项目结构

在IOS开发中,项目的目录结构如何搭建?

网上有很多关于IOS开发的学习资料.然而却很少有关于设计一个项目时,如何设计其目录结构?这对于自学IOS的程序猿们,无疑有诸多不利.接下来,我就简单的谈下真正在公司中,项目的目录结构如何搭建: 以上为第一种,先按照功能模块进行划分,然后遵循MVC设计模式,分别设置model,view,control子文件夹.对于非项目模块类,以及一些自己写的一些分类,第三方框架等等,存储在other中,如上图所示. 至于另外一种方案,则是先以MVC进行划分,然后针对于model,view,control,进行子

C#程序员学习Android开发系列之Android项目的目录结构

今天开始正式学习Android开发的种种细节,首先从最基本的概念和操作学起. 首先看一下Android项目的目录结构. 这是我随便建立的一个test项目,我们重点关注一下几个方面的内容: 1.src目录:存放java源代码的目录,里面建立一个包,包里面有4个java源文件(分别都继承自Activity).由于java要求比较严格,因此要求类名与文件名一致. gen(Generated Java Files)目录:自动产生Java源文件的目录,是由工具自动生成的,一般不需要自己修改.里面主要有一个

ASP.NET MVC 入门2、项目的目录结构与核心的DLL

原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/03/1303521.html 我们新建一个ASP.NET MVC的Web Application后,默认的情况下,项目的目录结构如下: App_Data :这个目录跟我们一般的ASP.NET website是一样的,用于存放数据. Content :这个目录是建议用来存放一下资源文件的.例如CSS.JS.图片等等.当然你不愿意的话,完全可以不放到这里来. Controllers :这个目录

Android开发学习——Android项目的目录结构

Android项目的目录结构: 资源文件夹: 清单配置文件: Android的四大组件在使用前全部需要在清单文件中配置 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.first"  //应用在系统中的

Android开发系列之Android项目的目录结构

今天开始正式学习Android开发的种种细节,首先从最基本的概念和操作学起. 首先看一下Android项目的目录结构. 这是我随便建立的一个test项目,我们重点关注一下几个方面的内容: 1.src目录:存放Java源代码的目录,里面建立一个包,包里面有4个java源文件(分别都继承自Activity).由于java要求比较严格,因此要求类名与文件名一致. 2.gen(Generated Java Files)目录:自动产生Java源文件的目录,是由工具自动生成的,一般不需要自己修改.里面主要有

AngularJS+requireJS项目的目录结构设想

准备用AngularJS + require.js 作为新项目的底层框架,以下目录结果只是一个初步设想: /default    放页面,不过对于one page 项目,可能里面需要建一个partials文件夹: /develop   放测试及web server相关的东西,这个是不需要部署到正式环境的,所以从static中分离出来了 /static      css+img+js+partials+r.js+build.js,后面两个是require.js打包压缩合并部署需要用的,  css+

Android系列教程之Android项目的目录结构

一: Android 项目的目录结构 Android 项目结构概览.其实 Android 项目的目录结构和 Java 的差不多,没有太大变化,如下图:  可以看到 src 文件夹里的是源文件, Android2.2 是引用的类库,这些和 java 的都一样,那么下面的这个 gen 是什么呢?这个里面的类就是 ADT 自动生成的啦,一般只有一个 R.java 文件,是不能修改的,那么他是怎么生成的呢,看到下面的 res 文件夹了吗? R.java 就是根据资源文件夹 res 生成的 ,R.java