golang的项目结构 相关知识
### 项目结构
```
├── bin
│ ├── login
│ └── main
├── pkg
│ └── darwin_amd64
│ └── login
│ └── auth1.a
├── src
│ ├── cfg
│ │ └── testcfg.go
│ ├── db
│ │ ├── innerdb
│ │ │ └── innerdb.go
│ │ └── db.go
│ ├── login
│ │ ├── auth1
│ │ │ └── auth1.go
│ │ ├── auth2
│ │ │ └── auth2.go
│ │ └── login.go
│ └── main.go
└── Makefile
``` ***
### 两种包导入方式 ##### local import
//使用相对路径导入package
import "./db"
这种方式使得包只能在当前的工程内部使用(你只有看到源码,才会知道包的相对路径是什么)
##### import
// 需要有源码存在于 GOPATH下面
import "login/auth1"
使用install命令, 可以把源码编译成.a文件(加快编译速度) 这种方式使得包可以被任意工程使用(也必须包含源码,可以是只有包声明文件)
需要注意的是,这种包内部,是不可以使用loca import导入其他的包的 ***
### 例子
##### main.go
```
import (
"./db"
"login/auth1"
) func main() {
auth1.Auth1()
db.UseCfg()
``` #### 满足下面任意一个条件 1. GOPATH目录下需要存在pkg/platform/login/auth1.a文件
2. GOPATH目录下需要存在src/login/auth1/ 包 *设置GOPATH为当前工程目录* ```
go build ./src/main -o ./bin/main
将会生成 ./bin/main go install ./src/main.go
login/auth1将会编译成auth1.a文件
``` #### 注意事项
使用install命令, 包的依赖链中, 凡是被import的源码包, 都会生成.a文件 ```
main.go
//把db导入方式改为import
import "db" db.go
import "./innerdb" // 无法执行
import "db/innerdb" // 正确 // 执行下列命令,将会生成db.a文件
go install ./src/main.go
或者
go install ./src/db ``` 一般一个项目里只有一个可执行文件
src/main.go 或者是多个main包的分割的文件
可以这样编译 go build -o ./bin/main ./src 如果src的子目录里有个main包,如果这个main只有一个文件,比如src/login/login.go
可以这样编译
go build ./src/login/login.go
login.go 里面是可以使用local import 的
如果login包 包含多个文件
需要这样编译
go build ./src/login/
此时就不可以使用local import了 ##### 结论
local import 不够灵活, 可小范围使用
尽量用import
golang的项目结构 相关知识的更多相关文章
- golang中并发的相关知识
golang中done channel理解:https://segmentfault.com/a/1190000006261218 golang并发模型之使用Context:https://segme ...
- EDP项目结构规范心得
本文结合最近心得,希望对项目结构方面知识进行归纳,包括两部分 一.目录结构的说明 二.目录结构标准规范(以百度efe团队为例) 下面切入正题: 一.项目目录结构说明: 项目结构具体说明: 1.src目 ...
- 使用Nginx+uwsgi在亚马逊云服务器上部署python+django项目完整版(二)——部署配置及相关知识
---恢复内容开始--- 一.前提: 1.django项目文件已放置在云服务器上,配置好运行环境,可正常运行 2.云服务器可正常连接 二.相关知识 1.python manage.py runserv ...
- Golang(十)TLS 相关知识(一)基本概念原理
0. 前言 最近参与一个基于 BitTorrent 协议的 Docker 镜像分发加速插件的开发,主要参与补充 https 协议 学习了 TLS 相关知识,下面对之前的学习做一下简单总结 参考文献:T ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- HTML入门基础教程相关知识
HTML入门基础教程 html是什么,什么是html通俗解答: html是hypertext markup language的缩写,即超文本标记语言.html是用于创建可从一个平台移植到另一平台的超文 ...
- Spring AOP四种实现方式Demo详解与相关知识探究
一.前言 在网络上看到一篇博客Spring实现AOP的4种方式,博主写的很通俗易懂,但排版实在抓狂,对于我这么一个对排版.代码格式有强迫症的人来说,实在是不能忍受~~~~(>_<)~~~~ ...
- .NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI
作为后端开发的我来说,前端表示真心玩不转,你如果让我微调一个位置的样式的话还行,但是让我写一个很漂亮的后台的话,真心做不到,所以我一般会选择套用一些开源UI模板来进行系统UI的设计.那如何套用呢?今天 ...
- SpringMVC+Spring+mybatis项目从零开始--分布式项目结构搭建
转载出处: SpringMVC+Spring+mybatis+Redis项目从零开始--分布式项目结构搭建 /** 本文为博主原创文章,如转载请附链接. **/ SSM框架web项目从零开始--分布式 ...
随机推荐
- corethink功能模块探索开发(六)让这个模块在前台显示
效果图:(注意右上角) 实现模块的前台显示只需要在模块目录中的Controller目录建立IndexController.class.php,实现index方法.继承HomeController.就能 ...
- 两个div同时滚动
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- 阿里云公网IP不能使用
1.开通专用网络 2.在ECS的安全组 创建 专用网络 3.配置规则 4.快速创建规则,增加自己需要入网的端口号,授权对象写:0.0.0.0/0
- 剑指offer 面试29题
面试29题: 题目:顺时针打印矩阵(同LeetCode 螺旋矩阵打印) 题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 ...
- Python基础(19)_异常处理
一.异常处理 错误和异常: 1.错误的种类: 1)语法错误:这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2)逻辑错误: 例如: res1=1/0 .es2=1+'str ...
- 从yum源下载软件包
以下是从163源下载openstack-ocata版软件包的脚本: from html.parser import HTMLParser from urllib import request impo ...
- Linux进程优先级查看及修改
进程cpu资源分配就是指进程的优先权(priority).优先权高的进程有优先执行权利.配置进程优先权对多任务环境的Linux很有用,可以改善系统性能.还可以把进程运行到指定的CPU上,这样一来,把不 ...
- C# TreeView,递归循环数据加载到treeView1中
TblAreaBLL bll = new TblAreaBLL(); private void button1_Click(object sender, EventArgs e) { LoadData ...
- Eclipse开发快捷键精选
1.alt+?或alt+/:自动补全代码或者提示代码2.ctrl+o:快速outline视图3.ctrl+shift+r:打开资源列表4.ctrl+shift+f:格式化代码5.ctrl+e:快速转换 ...
- 创建SVN仓库的步骤
今天在客户现场联调,两个开发人员之间的代码想用SVN来管理,所以就临时在本地机器上搭建一个SVN仓库.现将操作步骤记录下来,以便后续查阅. 1.安装SVN服务端Setup-Subversion-1.6 ...