在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
项目目录结构如何组织,一般语言都是没有规定。但 Go 语言这方面做了规定,这样可以保持一致性 1、一般的,一个 Go 项目在 GOPATH 下,会有如下三个目录:|--bin |--pkg |--src 其中,bin存放编译后的可执行文件;pkg 存放编译后的包文件;src 存放项目源文件。一般,bin 和 pkg 目录可以不创建,go 命令会自动创建(如 go install),只需要创建src目录即可。 2、举例说明比如:我新建一个项目,test,开始的目录结构如下: test--|--src 为了编译方便,我在其中增加了一个 install.sh 文件,目录结构: test/ |-- install.sh `-- src 其中install的内容如下:(linux下) #!/usr/bin/env bash if [ ! -f install.sh ]; 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.sh,是不用配置 GOPATH(避免新增一个GO项目就要往 GOPATH 中增加一个路径) 接下来,增加一个包:config 和一个 main 程序。目录结构如下: test |-- install.sh `-- 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.sh 这时候的目录结构为: test |-- bin | `-- test |-- install.sh |-- 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 2)有时候会见到 local import(不建议使用),语法类似这样:
当代码中有这样的语句时,很多时候都会见到类似这样的错误:local import "./config" in non-local package 我所了解的这种导入方式的使用是:当写一个简单的测试脚本,想要使用 go run 命令时,可以使用这种导入方式。 可见,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
参考: http://blog.studygolang.com/2012/12/Go项目的目录结构 |
请发表评论