Golang中Gorilla Mux在RaspberryPi上使用Go 1.15.x时无法工作的问题
Golang中Gorilla Mux在RaspberryPi上使用Go 1.15.x时无法工作的问题 你好。 我最近在树莓派4上将Go库从v1.14.x更新到了v1.15.3。 我所有使用Gorilla Mux的项目都停止工作了! 我一直使用Go的Linux/ARMv6版本(我认为这不是针对树莓派的官方移植版本),直到v1.14.x它们都能正常工作。 你可以用下面这段简单的代码来测试我遇到的问题:
package main
import (
"net/http"
"log"
"github.com/gorilla/mux"
)
func main() {
router := mux.NewRouter()
log.Fatal(http.ListenAndServe(":12111", router))
}
运行 go run main.go 会得到以下错误信息:
# vendor/golang.org/x/crypto/poly1305
/home/pi/go/src/vendor/golang.org/x/crypto/poly1305/sum_noasm.go:10:7: undefined: newMAC
这是怎么回事?
谢谢,祝好。
更多关于Golang中Gorilla Mux在RaspberryPi上使用Go 1.15.x时无法工作的问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html
问题似乎在 Go 1.15.4 中已修复。 感谢大家!
更多关于Golang中Gorilla Mux在RaspberryPi上使用Go 1.15.x时无法工作的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
感谢 @petrus。我认为他将问题提交给 Gorilla 团队是正确的做法。在这种情况下,我的担忧是无效的。
这个问题是由于Go 1.15中golang.org/x/crypto/poly1305包的内部实现变化导致的。在ARMv6架构上,该包缺少针对该架构的汇编优化实现,导致编译时newMAC函数未定义。
以下是解决方案:
1. 更新依赖包
go get -u golang.org/x/crypto
2. 如果问题仍然存在,可以尝试清理vendor目录并重新获取依赖:
rm -rf vendor/
go mod vendor
3. 或者直接使用go modules的replace指令强制使用最新版本:
// 在go.mod文件中添加
replace golang.org/x/crypto => golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee
4. 完整的工作示例:
// go.mod
module example
go 1.15
require github.com/gorilla/mux v1.8.0
replace golang.org/x/crypto => golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee
// main.go
package main
import (
"log"
"net/http"
"github.com/gorilla/mux"
)
func main() {
r := mux.NewRouter()
r.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Working on Raspberry Pi with Go 1.15"))
})
log.Println("Server starting on :12111")
log.Fatal(http.ListenAndServe(":12111", r))
}
这个问题已经在golang.org/x/crypto的后续版本中修复,更新依赖包即可解决。


