#はじめに
ローカルでのGo開発環境構築にあたりGo Moduleを利用したいと思っていました。
いろいろと設定を施しgo getで外部モジュール取ろうとした際にTLS Handshakeエラーにぶつかったのでその時の対応を備忘録として残します。
注)開発初心者が初めて構築しようとしているので優しく見てやってください。
実施環境
項目 | - |
---|---|
OS | Windows10 |
ターミナル | Git Bash |
ネット環境 | 社内Network(Proxy経由) |
Golang Ver. | 1.17.2 |
エラー内容
下記コマンド実行でfirst record does not look like a TLS handshake
のエラーが出ました。
(たまにDockerなどで見ることがあるような・・・)
$ go get github.com/spiegel-im-spiegel/errs
go get: module github.com/spiegel-im-spiegel/errs: Get "https://proxy.golang.org/github.com/spiegel-im-spiegel/errs/@v/list": proxyconnect tcp: tls: first record does not look like a TLS handshake
原因
原因としては下記2つありました。
①HTTPS_PROXYの変数名に誤りがあった
Go getなどのGoで使われるProxyはbashで設定した内容が使われるため、Bashのグローバル変数にProxyの設定はしたもののどうやら大文字/小文字の変数名定義が誤っており正しく設定できていませんでした。
Bashで使うProxy設定の変数名は大文字です。
■BAD
export https_proxy="https://example.com:8080"
■GOOD
export HTTPS_PROXY="https://example.com:8080"
②値が間違っていた(https://~ => http://~)
Dockerでも同じ罠にはまっておきながらまた繰り返しミスをしていました。
HTTPS用プロキシだからと言ってhttps://~と設定してしまいがちですが、
正しくはHTTP用プロキシ同様に**http://~**で設定しましょう。
おわり
なんとか上記対応でgo getできるようになりました!!
ですがgo getが非推奨になろうとしている中、こんなことをやってるなんて馬鹿げていましたね。