Skip to main content

gva 引用本地,却写了 github

明明是引用本地,却写了 github

你提到的代码虽然看起来像是引用了一个远程的 GitHub 仓库,但实际上它是引用了你本地项目中的包。Go 语言的模块系统(Go Modules)允许你使用类似 github.com/user/repo/path 的路径来引用你本地项目中的包。

理解 Go Modules

在使用 Go Modules 时,项目的包路径通常与项目的模块路径一致。模块路径通常是一个类似 github.com/user/repo 的路径,这个路径在 go.mod 文件中定义。因此,即使你在本地开发,也会使用这种路径来引用你的包。

示例

假设你的项目结构如下:

myapp/
├── go.mod
├── go.sum
├── main.go
├── global/
│ └── global.go
├── initialize/
│ └── initialize.go
└── service/
└── system/
└── system.go

你的 go.mod 文件可能包含如下内容:

module github.com/flipped-aurora/gin-vue-admin/server

go 1.18

require (
github.com/spf13/viper v1.8.1
go.uber.org/zap v1.19.0
gorm.io/driver/sqlite v1.2.3
gorm.io/gorm v1.21.15
)

alt text

在这种情况下,即使你在本地开发,你仍然会使用 github.com/flipped-aurora/gin-vue-admin/server/global 这样的路径来引用你的包。这是因为 github.com/flipped-aurora/gin-vue-admin/server 是你的模块路径,它在 go.mod 文件中定义,并且 Go 会根据这个路径来解析包。

代码解释

在你的代码中,引用 global 包的方式如下:

package core

import (
"fmt"
"github.com/flipped-aurora/gin-vue-admin/server/global"
"github.com/flipped-aurora/gin-vue-admin/server/initialize"
"github.com/flipped-aurora/gin-vue-admin/server/service/system"
"go.uber.org/zap"
)

type server interface {
ListenAndServe() error
}

func RunWindowsServer() {
if global.GVA_CONFIG.System.UseMultipoint || global.GVA_CONFIG.System.UseRedis {
// 初始化redis服务
initialize.Redis()
}
if global.GVA_CONFIG.System.UseMongo {
err := initialize.Mongo.Initialization()
if err != nil {
zap.L().Error(fmt.Sprintf("%+v", err))
}
}
// 从db加载jwt数据
if global.GVA_DB != nil {
system.LoadAll()
}

Router := initialize.Routers()
Router.Static("/form-generator", "./resource/page")

address := fmt.Sprintf(":%d", global.GVA_CONFIG.System.Addr)
s := initServer(address, Router)

global.GVA_LOG.Info("server run success on ", zap.String("address", address))

fmt.Printf(`
欢迎使用 gin-vue-admin
当前版本:v2.6.5
加群方式:微信号:shouzi_1994 QQ群:470239250
项目地址:https://github.com/flipped-aurora/gin-vue-admin
插件市场:https://plugin.gin-vue-admin.com
GVA讨论社区:https://support.qq.com/products/371961
默认自动化文档地址:http://127.0.0.1%s/swagger/index.html
默认前端文件运行地址:http://127.0.0.1:8080
--------------------------------------版权声明--------------------------------------
** 版权所有方:flipped-aurora开源团队 **
** 版权持有公司:北京翻转极光科技有限责任公司 **
** 剔除授权标识需购买商用授权:https://gin-vue-admin.com/empower/index.html **
`, address)
global.GVA_LOG.Error(s.ListenAndServe().Error())
}

在这里,github.com/flipped-aurora/gin-vue-admin/server/global 实际上是引用了你项目中的 global 包,并不是远程仓库的包。这个路径是根据你的模块路径和包路径来解析的。

总结

在 Go 中,即使在本地开发项目,引用包的路径通常也是类似 github.com/user/repo/path 这样的形式。这是因为 Go Modules 使用模块路径来管理包引用。只要你的 go.mod 文件中定义了正确的模块路径,Go 就能正确地解析和引用这些包。