1. 总览

在这里插入图片描述

package main

import (
	test2 "biturd/test"
	"biturd/test/test"
	"github.com/gin-gonic/gin"
	"github.com/gin-gonic/gin/ginS"
	// "github.com/gin-gonic/gin/internal/json"   编译器直接不允许了
)

func main() {
	//  首先gin的包就叫gin, 只有gin直接目录下的文件【package gin】才能被其他开发者直接引用
	//  内层虽然为是间接目录,但go语言只认package,不care目录结构。也不管你跨了几级引用,比如internal垮了两个目录。
	gin.Default()
	ginS.Any("")
	_ = test.A
	_ = test2.B
}

只有internal会用到模块的概念,区分模块内外。其他的通通按照包的路径直接引用。

所以在自己写模块的时候遵循以下原则,【个人认为】

  1. 最外围尽量简单,比如gin主包下只放核心逻辑。
  2. 封装特性,一方面通过大小写控制包层级下的变量、函数的导出,一方面通过模块层级下的internal路径包,控制包层级的导出。【比如开发中的业务逻辑,在web开发中主要是在这个模块中写代码】
  3. 复用原则,可以将许多其他模块可能能用到的逻辑,放到internal外面一个功能写一个包,调用者也容易区分。

自己写的包如何在本地仓库中更新。
go install
【go build只是编译成exe,加到bin目录下面,但是没有src下面的源码,go没有中间产物,所以要引用的话,引用的也是src】【java交付的是class,class对外隐藏细节,go直接exe对外隐藏细节】

2. go mod

【有了它,就不需要严格按照原生go的目录结构,必须在go path的src目录下放代码】
go mod init <package名字>
go mod download [下载当前mod下的包]
go mod vendor [生成引用的包的复制目录,这个是dep里遗留的,go mod中接近废弃] 原来使用的本意是先在项目verdor中找,再在goPath中找。

3. go dep工具【Gopkg.toml】

淘汰了,不要用了。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐