Go插件工具安裝問題
在Mac上在學習使用Go或者安裝其他帶有Go依賴的安裝包時(比如git-lfs)可能會遇到Go插件工具安裝問題[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-VuUSlag9-1586172743527)(Go插件工具安裝問題.assets/[email protected])]
下面我們就來解決一下這個問題(網上也有相關使用代理的情況,這裏不再說明)
引發原因
mac 下的包管理工具brew 可以方便的安裝工具包或者相應的軟件應用,當使用brew 安裝git-lfs(git上傳大文件的工具)時,因爲依賴Go 語言工具,所以在安裝時會報錯。下面就brew install git-lfs 時的問題來給出解決方案。
過程思路
如果想直接解決可以直接跳轉到解決方案
在網上搜索時發現 https://github.com/golang/tools 是 https://go.googlesource.com/tools.git 的一個鏡像。這樣我們只要修改brew下載git-lfs的腳本,將 https://go.googlesource.com/tools.git 替換成 https://github.com/golang/tools 應該就可以解決我們的問題。
登錄 Homebrew 的官網,找到Packages,[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-nHKO2UuE-1586172743529)(Go插件工具安裝問題.assets/[email protected])]
點擊 formulae.brew.sh ,選擇 Browse all macOS formulae
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-B5Bt2ZLA-1586172743529)(Go插件工具安裝問題.assets/[email protected])]
在搜索框搜索git-lfs,在頁面找到Formula code ,查看git-lfs在GitHub上的腳本源碼。
class GitLfs < Formula
desc "Git extension for versioning large files"
homepage "https://github.com/git-lfs/git-lfs"
url "https://github.com/git-lfs/git-lfs/releases/download/v2.10.0/git-lfs-v2.10.0.tar.gz"
sha256 "07fd5c57a1039d5717dc192affbe3268ec2fd03accdca462cb504c0b4194cd23"
bottle do
cellar :any_skip_relocation
sha256 "8fec7d8b8ad7c3332bfa1862dd8615712dab8315a9128ed8b5609fa1659431e7" => :catalina
sha256 "3c5bcef656ca742c6697b952c9f7c483c1fad046f52136dbe9ee0f16f44835c4" => :mojave
sha256 "ed0d8f1271d9d81a2c22622023c260ef040f2172e75357893ef54134bc6eedff" => :high_sierra
end
depends_on "go" => :build
depends_on "ruby" => :build
def install
ENV["GIT_LFS_SHA"] = ""
ENV["VERSION"] = version
(buildpath/"src/github.com/git-lfs/git-lfs").install buildpath.children
cd "src/github.com/git-lfs/git-lfs" do
ENV["GEM_HOME"] = ".gem_home"
system "gem", "install", "ronn"
system "make", "vendor"
system "make"
system "make", "man", "RONN=.gem_home/bin/ronn"
bin.install "bin/git-lfs"
man1.install Dir["man/*.1"]
man5.install Dir["man/*.5"]
doc.install Dir["man/*.html"]
end
end
def caveats
<<~EOS
Update your git config to finish installation:
# Update global git config
$ git lfs install
# Update system git config
$ git lfs install --system
EOS
end
test do
system "git", "init"
system "git", "lfs", "track", "test"
assert_match(/^test filter=lfs/, File.read(".gitattributes"))
end
end
當前代碼中並沒有相關 https://go.googlesource.com/tools.git 的信息,因爲當前是Go的tools,所以再去查看Go的安裝腳本(git-lfs的腳本中依賴Go和Ruby,所以只有可能是這兩個裏面有問題,因爲tools是Go相關的的工具,所以首先我們可以查看Go的安裝腳本)。這是Go語言brew的安裝腳本 https://github.com/Homebrew/homebrew-core/blob/master/Formula/go.rb
class Go < Formula
desc "Open source programming language to build simple/reliable/efficient software"
homepage "https://golang.org"
stable do
url "https://dl.google.com/go/go1.14.1.src.tar.gz"
mirror "https://fossies.org/linux/misc/go1.14.1.src.tar.gz"
sha256 "2ad2572115b0d1b4cb4c138e6b3a31cee6294cb48af75ee86bec3dca04507676"
go_version = version.to_s.split(".")[0..1].join(".")
resource "gotools" do
url "https://go.googlesource.com/tools.git",
:branch => "release-branch.go#{go_version}"
end
end
bottle do
sha256 "36fdd54a9307ba19cc69425586e2d63188f2f2b7f541ab9fd2ef3447e376329f" => :catalina
sha256 "bab387fda3e4683943bd7b9b9208141502d6a2cc42c4b21137effaec9f208e1c" => :mojave
sha256 "ffb583abeb5263269281532f45a70a074ae0affe6edecb13442024b70bf13b04" => :high_sierra
end
head do
url "https://go.googlesource.com/go.git"
resource "gotools" do
url "https://go.googlesource.com/tools.git"
end
end
depends_on :macos => :el_capitan
# Don't update this unless this version cannot bootstrap the new version.
resource "gobootstrap" do
url "https://storage.googleapis.com/golang/go1.7.darwin-amd64.tar.gz"
sha256 "51d905e0b43b3d0ed41aaf23e19001ab4bc3f96c3ca134b48f7892485fc52961"
end
def install
(buildpath/"gobootstrap").install resource("gobootstrap")
ENV["GOROOT_BOOTSTRAP"] = buildpath/"gobootstrap"
cd "src" do
ENV["GOROOT_FINAL"] = libexec
ENV["GOOS"] = "darwin"
system "./make.bash", "--no-clean"
end
(buildpath/"pkg/obj").rmtree
rm_rf "gobootstrap" # Bootstrap not required beyond compile.
libexec.install Dir["*"]
bin.install_symlink Dir[libexec/"bin/go*"]
system bin/"go", "install", "-race", "std"
# Build and install godoc
ENV.prepend_path "PATH", bin
ENV["GOPATH"] = buildpath
(buildpath/"src/golang.org/x/tools").install resource("gotools")
cd "src/golang.org/x/tools/cmd/godoc/" do
system "go", "build"
(libexec/"bin").install "godoc"
end
bin.install_symlink libexec/"bin/godoc"
end
test do
(testpath/"hello.go").write <<~EOS
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
EOS
# Run go fmt check for no errors then run the program.
# This is a a bare minimum of go working as it uses fmt, build, and run.
system bin/"go", "fmt", "hello.go"
assert_equal "Hello World\n", shell_output("#{bin}/go run hello.go")
# godoc was installed
assert_predicate libexec/"bin/godoc", :exist?
assert_predicate libexec/"bin/godoc", :executable?
ENV["GOOS"] = "freebsd"
ENV["GOARCH"] = "amd64"
system bin/"go", "build", "hello.go"
end
end
安裝腳本里面有請求 https://go.googlesource.com/tools.git 地址的信息,我們可以將這塊的替換掉應該就可以。
解決方案
brew在本地管理安裝包的文件夾爲
/usr/local/Cellar/
brew在本地管理安裝腳本的文件夾爲
/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula
這裏我們只需要修改/usr/local/Homebrew/Library/Taps
下Go的安裝腳本,將 https://go.googlesource.com/tools.git 替換成 https://github.com/golang/tools 即可。
class Go < Formula
desc "Open source programming language to build simple/reliable/efficient software"
homepage "https://golang.org"
stable do
url "https://dl.google.com/go/go1.14.1.src.tar.gz"
mirror "https://fossies.org/linux/misc/go1.14.1.src.tar.gz"
sha256 "2ad2572115b0d1b4cb4c138e6b3a31cee6294cb48af75ee86bec3dca04507676"
go_version = version.to_s.split(".")[0..1].join(".")
resource "gotools" do
#url "https://go.googlesource.com/tools.git",
url "https://github.com/golang/tools.git",
:branch => "release-branch.go#{go_version}"
end
end
bottle do
sha256 "36fdd54a9307ba19cc69425586e2d63188f2f2b7f541ab9fd2ef3447e376329f" => :catalina
sha256 "bab387fda3e4683943bd7b9b9208141502d6a2cc42c4b21137effaec9f208e1c" => :mojave
sha256 "ffb583abeb5263269281532f45a70a074ae0affe6edecb13442024b70bf13b04" => :high_sierra
end
head do
#url "https://go.googlesource.com/go.git"
url "https://github.com/golang/tools.git"
resource "gotools" do
#url "https://go.googlesource.com/tools.git"
url "https://github.com/golang/tools.git"
end
end
depends_on :macos => :el_capitan
# Don't update this unless this version cannot bootstrap the new version.
resource "gobootstrap" do
url "https://storage.googleapis.com/golang/go1.7.darwin-amd64.tar.gz"
sha256 "51d905e0b43b3d0ed41aaf23e19001ab4bc3f96c3ca134b48f7892485fc52961"
end
def install
(buildpath/"gobootstrap").install resource("gobootstrap")
ENV["GOROOT_BOOTSTRAP"] = buildpath/"gobootstrap"
cd "src" do
ENV["GOROOT_FINAL"] = libexec
ENV["GOOS"] = "darwin"
system "./make.bash", "--no-clean"
end
(buildpath/"pkg/obj").rmtree
rm_rf "gobootstrap" # Bootstrap not required beyond compile.
libexec.install Dir["*"]
bin.install_symlink Dir[libexec/"bin/go*"]
system bin/"go", "install", "-race", "std"
# Build and install godoc
ENV.prepend_path "PATH", bin
ENV["GOPATH"] = buildpath
(buildpath/"src/golang.org/x/tools").install resource("gotools")
cd "src/golang.org/x/tools/cmd/godoc/" do
system "go", "build"
(libexec/"bin").install "godoc"
end
bin.install_symlink libexec/"bin/godoc"
end
test do
(testpath/"hello.go").write <<~EOS
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
EOS
# Run go fmt check for no errors then run the program.
# This is a a bare minimum of go working as it uses fmt, build, and run.
system bin/"go", "fmt", "hello.go"
assert_equal "Hello World\n", shell_output("#{bin}/go run hello.go")
# godoc was installed
assert_predicate libexec/"bin/godoc", :exist?
assert_predicate libexec/"bin/godoc", :executable?
ENV["GOOS"] = "freebsd"
ENV["GOARCH"] = "amd64"
system bin/"go", "build", "hello.go"
end
end
注:
本文屬於作者原創,如需轉載,請註明。
內部如果引用的文字,連接,圖片等資源存在侵犯原作者的情況,請聯繫本人,立即刪除。