这个问题是因为 Golang 在进行特定 TLS 握手时会验服务器端证书,而这个验证过程可能会因为缺少“根证书”而失败。解决办法如下:
- 在你的 App Engine 项目下创建 vendor 目录:mkdir -p YOUR_PROJECT/vendor
- 跳转至 vendor 目录下:cd YOUR_PROJECT/vendor
- 下载根证书:curl -O https://pki.google.com/roots.pem
- 创建 .gcloudignore 文件并添加如下忽略规则:
vendor/**
!vendor/.keep
- 重新部署你的应用程序:gcloud app deploy
最后,一定要记得忽略 vendor 目录中的大部分子目录和文件,但不要忽略 vendor/.keep,因为如果这个目录没有文件就不会被上传。