7sDream / rikka

A simple image share system in go.
https://rikka.7sdre.am
MIT License
207 stars 35 forks source link

fix issue about breaking change in uuid.NewV4() #11

Closed Allianzcortex closed 5 years ago

Allianzcortex commented 5 years ago

Hi ~

最近在尝试构建 rikka 应用,在构建过程 go build . 这一步里出现了一个问题,截图如下: image

搜索关键字 multiple-value uuid.NewV4() in single-value context 就可以发现很多应用都出了这个问题,比如 star 数比较多的 sprigacme

出现的原因是 uuid API 的更改,摘举如下:

This issue is due to an upstream API change in the github.com/satori/go.uuid package, specifically, the change for satori/go.uuid#18. A number of people have raised issues against go.uuid about this being a breaking API change, so there's a chance that it will be reverted at some point.

直接用 go get 而不用 package management 终于出现了致命的问题。看到的一个比较激进的 fix 方式是直接用 Google 的 uuid 替代 replace satori/go.uuid with google/uuid.......

有一个解决方式 fix-patch 是用 uuid.MustNewV4() 来代替 uuid.NewV4(),但我测试没有通过,因此退而求其次用了如下的方法: git -C $GOPATH/src/github.com/satori/go.uuid checkout v1.2.0 之后一切编译正常。

这里存照一下,希望能帮助后来也遇到这个问题的人。我也试试看有没有什么方法能一劳永逸解决(D

Allianzcortex commented 5 years ago

还有一个问题是不知道您在开发的时候是怎么调试的?我理解的话起始跑的点肯定是在 package main 下的 func main(),找到了 entry.go 与 rikkac.go,但这个两个我尝试 go run 或者 debug 时都会提示有 undefined variable,所以想知道有没有什么可以一步一步看代码调用的方法


update:我在 git checkout release-0.0.1 后找到了 main.go 函数,可以用 go run main.go 来执行......我看看 diff 信息试试

7sDream commented 5 years ago

这个项目也比较久远了…… 我记得上次尝试构建的时候还有一些七牛云的 SDK 包更新,接口改变造成的问题……

如果只是尝试用的话,建议使用很早之前就已经构建好的 Docker 镜像。

如果是想学习一下源代码,emm,或许可以考虑参考一些更好的 golang 项目,实话说我的 go 语言水平并没有达到足够让别人学习的程度……

以上,Happy Hacking。


嗷,刚想起来,七牛云的问题之前有同学提出来过,上次抽空已经修了 2694304b56889439e8c48318ab9f3220b33eebe7 ,这个 Project 真的太久没动已经几乎忘了……惭愧

Allianzcortex commented 5 years ago

@7sDream 233 我最近在看 gin 和它 route 的早期代码,还有一些标准库。虽然 Go 的项目很多但原生使用 net/http 和 js 结合的项目很少(现在主要做的业余方向是这个)。并且我觉得项目质量很好啊,看不同 tag 之间的 diff 信息挺有趣的

7sDream commented 5 years ago

说到调试……

主项目的入口是 entry.go 里的 main,rikkac 那个是命令行 CLI 的。

当时我的调试应该主要是借助代码里非常详细的 Log,直接 build + 运行跑的。参见 Makefile,貌似确实没用过什么调试手段。

至于 go run 会报变量不存在的问题可能和 init.go 没有被执行有关,可以尝试下把文件里的代码全都复制到 entry.go 里再试试。

Allianzcortex commented 5 years ago

@7sDream 是...我最后参考的是这个 SO 回答,执行 go run entry.go init.go 这个命令,need to supply all files as argument 同时跑两个文件,在 release-0.4.1 最新版本执行通过

7sDream commented 5 years ago

OK,那这个 Issue 我先关了,如果有其他问题欢迎另开 OvO