问题描述
在编译 ngrok 1.0 时,出现以下错误:
import "golang_org/x/net/http/httpguts": import path does not begin with hostname package golang_org/x/net/http/httpguts: unrecognized import path "golang_org/x/net/http/httpguts"
原因是 Go 1.4.2 的依赖路径问题,建议升级到 Go 1.10 并重新编译。
解决方案
1. 卸载旧版 Go 1.4.2
sudo rm -rf /usr/local/go sudo rm -rf /root/go
2. 安装 Go 1.10
# 下载 Go 1.10.8(Linux 64位) wget https://dl.google.com/go/go1.10.8.linux-amd64.tar.gz # 解压到 /usr/local sudo tar -C /usr/local -xzf go1.10.8.linux-amd64.tar.gz # 设置环境变量 echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc echo 'export GOPATH=$HOME/go' >> ~/.bashrc source ~/.bashrc # 验证安装 go version # 预期输出:go version go1.10.8 linux/amd64
3. 设置 ngrok 编译环境
# 创建必要的依赖目录 mkdir -p ~/go/src/golang.org/x cd ~/go/src/golang.org/x # 获取依赖库 git clone https://go.googlesource.com/net git clone https://go.googlesource.com/sys git clone https://go.googlesource.com/crypto # 返回 ngrok 源码目录 cd /root/ngrok/ngrok
4. 重新编译 ngrok
# 清理旧编译文件 make clean # 编译服务端(server) GOOS=linux GOARCH=amd64 make release-server # 如果需要客户端(client) GOOS=linux GOARCH=amd64 make release-client
常见问题排查
1. 依赖获取不完整
go get -v -d ./...
2. Git SSL 证书问题
git config --global http.sslVerify false
3. GOPATH 设置问题
export GOPATH=/root/go export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
4. 权限问题
chown -R $USER:$USER /root/go
总结
升级到 Go 1.10 后,ngrok 1.0 的依赖路径问题应该可以解决。如果仍然报错,请检查:
GOPATH
是否正确设置- 是否已正确安装
golang.org/x/net
等依赖 - 是否清理了旧的编译缓存 (
make clean
)
完成编译后,bin/
目录下会生成 ngrokd
(服务端)和 ngrok
(客户端)。