github中glog库引入依赖问题
来源:5-5 引入google的glog库
慕UI7218247
2023-12-19
使用github上边的glog库,直接git clone到了signaling项目的src目录中。然后把多余文件删掉只留下了视频中显示的glog_file.go glog.go glog_test.go 和go.mod以及LICENSE信息,并修改完了视频中需要修改地方的代码。
root@VM-8-11-ubuntu:/opt/go/signaling# tree src/glog/
src/glog/
├── glog_file.go
├── glog.go
├── glog_test.go
├── go.mod.bak
├── LICENSE
└── README.md
不过在go build的时候报错
root@VM-8-11-ubuntu:/opt/go/signaling# ./build.sh
src/glog/glog.go:116:2: no required module provides package github.com/golang/glog/internal/logsink; to add it:
go get github.com/golang/glog/internal/logsink
src/glog/glog.go:117:2: no required module provides package github.com/golang/glog/internal/stackdump; to add it:
go get github.com/golang/glog/internal/stackdump
root@VM-8-11-ubuntu:/opt/go/signaling#
看了一下代码glog.go 中的import,比视频中的版本多了两个依赖,应该是仓库中internal文件夹中的依赖文件。
import (
"bytes"
"context"
"errors"
"fmt"
stdLog "log"
"os"
"reflect"
"runtime"
"runtime/pprof"
"strconv"
"sync"
"sync/atomic"
"time"
"github.com/golang/glog/internal/logsink"
"github.com/golang/glog/internal/stackdump"
)
按照提示执行了go get这两个依赖,然后继续编译出现如下错误
root@VM-8-11-ubuntu:/opt/go/signaling# ./build.sh
package command-line-arguments
imports signaling/src/glog
src/glog/glog.go:116:2: use of internal package github.com/golang/glog/internal/logsink not allowed
说是internal内部包不被允许。
他是不是去访问GOPATH下边的pkg里边的文件去了
root@VM-8-11-ubuntu:/opt/go/signaling# tree /opt/go/pkg/mod/github.com/golang/glog@v1.2.0/internal/
/opt/go/pkg/mod/github.com/golang/glog@v1.2.0/internal/
├── logsink
│ ├── logsink_fatal.go
│ ├── logsink.go
│ └── logsink_test.go
└── stackdump
├── stackdump.go
└── stackdump_test.go
直接把internal复制到我的项目中,把所有glog文件中,但凡import中用到github的地方都改成了自己项目中的位置signaling/src/glog/internal/xxxxx
不报错但是有一些函数找不到
root@VM-8-11-ubuntu:/opt/go/signaling# ./build.sh
# signaling/src/glog
src/glog/glog.go:219:27: undefined: backtraceAt
src/glog/glog.go:329:5: undefined: backtraceAt
src/glog/glog.go:408:17: undefined: verboseEnabled
src/glog/glog.go:647:9: undefined: abortProcess
src/glog/glog_file.go:188:9: undefined: toStderr
src/glog/glog_file.go:188:21: undefined: alsoToStderr
src/glog/glog_file.go:188:51: undefined: stderrThreshold
src/glog/glog_file.go:219:10: undefined: toStderr
这些函数是属于glog_flags.go和glog_file_linux.go中的(第二个文件取决于不同平台,我们使用linux开发就是后缀为_linux.go的)
把这两个函数复制到自己项目的glog目录再次编译就没报错了。
这样做是否可行。可能是glog库和视频中的版本不一致的问题。
1回答
-
你下载的glog库是最新的版本,新版本有了较大的改动,如果测试各方面功能没有问题的话,应该问题不大。如果不太放心,可以使用我提供的glog代码,在慕课网的git仓库可以下载。如果后续课程掌握的差不多,也可以研究下glog的源码,自己升级到最新的版本。如果还有其它更为细节的问题,也可以加入本课程的qq群,以方便提供更好的答疑服务。
012023-12-19
相似问题