75142913在线留言
GO语言学习笔记8:程序的包管理与理解_Go语言_网络人

GO语言学习笔记8:程序的包管理与理解

Kwok 发表于:2020-10-03 13:03:48 点击:4 评论: 0

每个 Go 程序都是由包构成的。程序从 main 包开始运行。也就是说main为程序的入口。按照约定,包名与导入路径的最后一个元素一致。例如,"math/rand" 包中的源码均以 package rand 语句开始。

程序需要引用包来实现其包的功能,在GO语言中,未使用的包要清理或者忽略掉,否则编译不会通过。

import "fmt" //引入1个包

//引入1个或者多个包
import (
	"fmt"
	_ "math" //前面加了下线包表示这个包将忽略掉
)

一、引包

引入包的路径是从项目环境变量的src目录开始的(不包括src),通常情况下包与目录和文件的名字一致:

    电脑的工作区
	|
	+--- bin目录 // go install 安装目录。
	|	  |
	| 	  +--- 我的项目名
	|
	|
	+--- pkg目录 //go build ⽣成静态库 (.a) 存放目录。
	| 	  |
	|	  +--- darwin_amd64
	| 			|
	| 			+--- 我的库.a
	| 					|
	| 					+--- 我的库
	|						 |
	|						 +--- 库项目.a
	|
	+--- src目录 // 项目源码目录。引包就从下面开始
		  |
		  +--- 我的项目目录
		  | 	 |
		  | 	 +--- main.go
		  |
		  |
		  +--- 我的库目录 
		  	|
			+--- 我的库.go
			|
			+--- 公共库目录
			|
			+--- 公共库文件.g

可以在GOPATH环境变量中添加多个工作空间,但不能和GOROOT相同。通常go get使用第一个工作空间保存下载的第三方库

编码:源码⽂件必须是 UTF-8 格式,否则会导致编译器出错。
结束:单行语句 “;” 结束,换行语句“;”省略。
注释:⽀持 “//”、 “/**/” 两种注释⽅式,不能嵌套。
命名:采⽤ 驼峰命令(camelCasing) ⻛格,不建议使⽤下划线。

二、别名

引包可以使用别名,很多时候我们引用的包名字很长,或者记不住包的名字,我们可以给包取个自定义的名字方便我们调用:

import(
	io "fmt"
)
io.Println("hello world") //别名可以直接用,在包重名时很有用

或者这样操作:

import (
	. "fmt"  //但是为了别人好看,一般还是不用这种
)
func main(){
	Println("hello")
}

很多人说GO语言是面向github编程,因为可以直接引用github上的包,

import "github.com/xxxx/xxx"

go build 命令会使用 GOPATH的设置,在磁盘上搜索这个包。事实上,这个导入路径代表一个URL,指向 GitHub上的代码库。如果路径包含 URL,可以使用 Go 工具链从DVCS 获取包,并把包的源代码保存在 GOPATH指向的路径里与 URL 匹配的目录里。这个获取过程使用 go get 命令完成。 go get 将获取任意指定的 URL 的包,或者一个已经导入的包所依赖的其他包。由于 go get的这种递归特性,这个命令会扫描某个包的源码树,获取能找到的所有依赖包。

三、实际项目中包命名的规范

文件夹名称 含义
src,source 源代码,用src居多
test,__tests__ 测试文件,也经常用__test__,facebook的测试框架jest默认的测试文件目录就是__test__
docs 文档
lib 库文件,library的缩写
dist 用来放打包编译后的文件,distribution的缩写
build,scripts 构建脚本
utils,tools,helpers 工具代码
controllers,views,middlewares,models MVC对应的models,views,controllers,还有中间件middlewares
router 路由
server 用来放服务端代码
adapters 适配器,适配器模式是一种很常用的设计模式
legacy 一般用来放兼容历史版本或兼容旧浏览器的代码
config 配置文件、数据库连接配置什么的
benchmarks benchmarks测试,又叫基准测试或性能测试。用来测试版本的性能变化
unit,spec 单元测试,一般在test目录下
e2e 端对端测试,一般在test目录下
assets,vendor 资源,一般用来放图片或css文件
css,styles css文件
js javascript文件
images,img 图片文件
fonts 字体文件、比如随机调用字体生成验证码
pages 页面文件、一般存放静态HTML文件
static 静态资源、CSS、JS、图片等
examples,demo 示例,开源框架演示
component 组件,部件
plugins 插件、扩展
bin 命令脚本,命令行工具经常会用到
common,public 公用的文件,大家都需要调用使用的
packages 很多项目会打包出多个npm包,用来减小体积,一般会用packages来放不同的包
misc 杂项,miscellaneous的缩写,一些不小常用却能用上的代码
core 核心文件,用于存放主功能函数、方法。
 dao  data access object的缩写,用于数据访问层,即数据库操作

四、文件的命名规范

1、文件名_平台:file_windows.go, file_unix.go

2、测试单元:被测试的文件_test.go : main_test.go

3、版本区别:文件名_版本号等:main_1.5.go

4、CPU类型:main_x86.go、main_arm.go、main_amd64.go

 

除非注明,网络人的文章均为原创,转载请以链接形式标明本文地址:http://www.neter8.com/go/77.html
标签:GO项目Kwok最后编辑于:2020-11-24 11:24:21
0
感谢打赏!

《GO语言学习笔记8:程序的包管理与理解》的网友评论(0)

本站推荐阅读

热门点击文章