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项目从零开始--分布式 ...
随机推荐
- 【jenkins】jenkins实时显示python脚本输出
jenkins在构建shell脚本时可以实时输出结果,但是在构建python脚本时,是等到python执行完成以后,才显示结果,这个对于我们判断脚本执行状态非常不利 这里介绍一种方法,能够实时显示py ...
- 剑指offer 面试11题
面试11题: 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4 ...
- Python Variable Scope
Python中的变量的作用域有时会让像我这样的初学者很头疼. 其实只需要掌握以下两点: 1. Python能够改变变量作用域的代码段是def.class.lamda; 而if/elif/else ...
- PAT 天梯赛 L1-027. 出租 【模拟】
题目链接 https://www.patest.cn/contests/gplt/L1-027 题意 给出一串电话号码,找出其中不同数字的个数,并且按递减顺序排列,然后 有一个index 数组,指出每 ...
- HackerRank - fibonacci-modified 【大数】
思路 用PYTHON 或 JAVA 干掉 AC代码 a, b, n = map(int, input().split()) for i in range (2, n, 1) : temp = b b ...
- Zuul
一.zuul是什么 zuul 是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用. Zuul 在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架. ...
- linux mint —— 图片一张
概述 Linux Mint是一種基於Ubuntu開發出的Linux操作系统.由Linux Mint Team团队于2006年开始发行.Linux Mint 的目标是为家庭用户和企业客户提供一个免费.高 ...
- cocos打包出现错误,执行命令出错,返回值:2。 Traceback (most recent call last): File "E:\cocos_workspace\MyGameOne\proj.android\build_native.py", line 43, in <module> build(opts.build_mode) File "E:\cocos_workspace\MyGa
先看看NDK的版本,如果不行,就删除\proj.android\obj\local\armeabi下的文件.
- 【TopCoder】SRM160 DIV1总结
做了两道题之后才发现做的是DIV1,不是DIV2,DIV1的第二道题是DIV1的第三道题,果断决定第3题就不看了=.= 250分题:给定一个时间起点8:00 AM DAY 1,再给出一组时间终点,格式 ...
- 【Flask】Flask-Sqlalchemy使用笔记
### 安装:```shellpip install flask-sqlalchemy``` ### 数据库连接:1. 跟sqlalchemy一样,定义好数据库连接字符串DB_URI.2. 将这个定义 ...