请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

github中glog库引入依赖问题

使用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.goglog_file_linux.go中的(第二个文件取决于不同平台,我们使用linux开发就是后缀为_linux.go的)
把这两个函数复制到自己项目的glog目录再次编译就没报错了。
这样做是否可行。可能是glog库和视频中的版本不一致的问题。

正在回答

1回答

你下载的glog库是最新的版本,新版本有了较大的改动,如果测试各方面功能没有问题的话,应该问题不大。如果不太放心,可以使用我提供的glog代码,在慕课网的git仓库可以下载。如果后续课程掌握的差不多,也可以研究下glog的源码,自己升级到最新的版本。如果还有其它更为细节的问题,也可以加入本课程的qq群,以方便提供更好的答疑服务。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕UI7218247 #1
    好的多谢老师
    回复 有任何疑惑可以回复我~ 2023-12-19 15:23:31
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号