这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
hello everybody 我是Devin,今天是我写笔记的第二天,昨天的笔记我们简单的对GO语言的语法做了简短的了解,今天我们来深入一些,思考一些关于比如依赖管理、一些我遇到的奇怪小bug
依赖管理-为啥import的都是仓库地址?
这个可以说是我对go最疑惑的地方了,因为在.go语言import那里我们都是填github的地址,难道我每次运行go语言文件都要联网去连接那些文件吗?像其他语言我们都是把依赖下载到本地的仓库里,当要使用的时候直接导入进来本地的包就行了,甚至有时候源文件就在本地,我们import自己项目下的文件都填了代码仓库地址,这真的很奇怪 我们来看个例子
import (
"net"
"github.com/cloudwego/kitex-examples/bizdemo/easy_note/cmd/note/dal"
"github.com/cloudwego/kitex-examples/bizdemo/easy_note/cmd/note/rpc"
note "github.com/cloudwego/kitex-examples/bizdemo/easy_note/kitex_gen/notedemo/noteservice"
"github.com/cloudwego/kitex-examples/bizdemo/easy_note/pkg/bound"
"github.com/cloudwego/kitex-examples/bizdemo/easy_note/pkg/constants"
"github.com/cloudwego/kitex-examples/bizdemo/easy_note/pkg/middleware"
tracer2 "github.com/cloudwego/kitex-examples/bizdemo/easy_note/pkg/tracer"
"github.com/cloudwego/kitex/pkg/klog"
"github.com/cloudwego/kitex/pkg/limit"
"github.com/cloudwego/kitex/pkg/rpcinfo"
"github.com/cloudwego/kitex/server"
etcd "github.com/kitex-contrib/registry-etcd"
trace "github.com/kitex-contrib/tracer-opentracing"
)
func Init() {
tracer2.InitJaeger(constants.NoteServiceName)
rpc.InitRPC()
dal.Init()
}
这个项目是kitex-examples里面的一个小demo,名字是eazy_note,大家看到没,这个文件导入自己目录pkg下的文件都填的是github/xxxxx的地址,这是不是很诡异的一件事,我本地有的文件不在本地读,跑到线上去读,如果某天家里网断了,是不是都运行不了这些go项目了?
其实不是的 原来如此
关键就在于go.mod文件,我们来看看它
module github.com/cloudwego/kitex-examples/bizdemo/easy_note
go 1.16
require (
github.com/apache/thrift v0.15.0
github.com/bytedance/gopkg v0.0.0-20221122125632-68358b8ecec6 // indirect
github.com/cloudwego/hertz v0.4.0
github.com/cloudwego/kitex v0.4.4
github.com/cloudwego/netpoll v0.3.2 // indirect
github.com/hertz-contrib/jwt v1.0.1
github.com/kitex-contrib/registry-etcd v0.0.0-20220110034026-b1c94979cea3
github.com/kitex-contrib/tracer-opentracing v0.0.3
github.com/opentracing/opentracing-go v1.2.0
github.com/shirou/gopsutil v3.21.11+incompatible
github.com/tklauser/go-sysconf v0.3.9 // indirect
github.com/uber/jaeger-client-go v2.30.0+incompatible
github.com/yusufpapurcu/wmi v1.2.2 // indirect
golang.org/x/net v0.5.0 // indirect
google.golang.org/protobuf v1.28.1
gorm.io/driver/mysql v1.2.3
gorm.io/gorm v1.22.5
gorm.io/plugin/opentracing v0.0.0-20211220013347-7d2b2af23560
)
replace github.com/apache/thrift => github.com/apache/thrift v0.13.0
首先第一行,是我们的module,项目名称,这个是我们自定义的,关键为什么导入的本地依赖是网址问题就出在这里,虽然我们import的是github/xxx但是实际上是从go.mod所在的文件目录开始的,也就是说虽然import的是url,但是实际是在本地读取的,想到这,其实require那些依赖都有了头绪了,只有在go mod download或者go mod tidy的时候是真正在从网络上下载依赖,其他时候我们import的都是本地的东西,只是因为它们go.mod文件下的module名字就是仓库地址才导致import的地址十分奇怪
以上就是本篇笔记的全部内容啦