原文連接:https://github.com/Dream4ever...前端
tus/tusd,這是項目官網,該項目是一個後端服務,用於接收從前端頁面所上傳的文件。搭配前端 JS 庫 transloadit/uppy,便可實現完整的文件上傳功能。git
tusd 這個庫的一大亮點,是能夠實現文件的斷點續傳。github
需已在 Windows 上安裝 Go
進入 $GOPATH\src
目錄,$GOPATH
一般位於 C:\Users\XXX\go
。若是沒有的話,就新建對應目錄,路徑裏的 XXX
是當前用戶名。golang
執行下面的命令,將項目克隆至當前目錄中。shell
git clone https://github.com/tus/tusd.git
第一個坑:注意上面的克隆地址和 GitHub 官網給出的不同,若是用的是官網給出的地址 git@github.com:tus/tusd.git
,會報下面的錯誤:windows
git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
執行下面兩條命令,下載並安裝 tusd 所需的依賴。後端
go get -u github.com/aws/aws-sdk-go/ go get -u github.com/prometheus/client_golang/prometheus
第二個坑:爲保證依賴可以正常下載,請參照 解決 go get 太慢的問題 一文中所說的方法,配置 GOPROXY
參數,並在終端開啓代理。bash
經實際測試,在配置了 GOPROXY
並在終端開啓代理以後,第一個依賴 aws-sdk-go
可正常下載編譯。tcp
第三個坑:即便配置了 GOPROXY
並在終端開啓代理,安裝第二個依賴 prometheus
的時候仍是會報錯。這裏並非說所作的設置出了問題,而是由於這個依賴須要從 golang.org/x
這個網站上下載包。奇怪的是,在終端所開啓的代理對 GitHub 有效,對這個網站就無效,因此纔有了這個坑。測試
既然如此,就只能曲線救國了,按照 解決 go get 太慢的問題 一文中所說的另外一個方法,去 golang 在 GitHub 上的鏡像項目裏下載對應的包。
好比在安裝第二個依賴 prometheus
的時候,給出了下面的提示,意思就是沒能下載到 sys/windows
這個包。
package golang.org/x/sys/windows: unrecognized import path "golang.org/x/sys/windows" (https fetch: Get https://golang.org/x/sys/windows?go-get=1: dial tcp 216.239.37.1:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.)
那就去 golang 在 GitHub 上面的網站看看,能夠找到 sys/windows 這個包,先把它下載過來:
go get -u github.com/golang/sys/windows
上面的命令會把 sys/windows
這個包下載到 $GOPATH\src\github.com\golang\sys
目錄下,而前面安裝依賴 prometheus
的時候,所提到的包的名稱是 golang.org/x/sys/windows
,那就須要把剛下載過來的這個包放到提示信息中所說的目錄下面。
爲了省事,直接把 $GOPATH\src\github.com\golang\sys
這個文件夾,複製到 $GOPATH\src\golang.org\x
下面。
這個時候,再執行一遍下面的命令,繼續安裝第二個依賴。
go get -u github.com/prometheus/client_golang/prometheus
此次的安裝之因此能成功,是由於 go get -u
中的 -u
參數,對於已經下載到本地的包,不會重複下載,這樣前面手動把 sys/windws
這個包下載過來了,因此此次安裝第二個依賴的時候,就能直接使用已經下載過來的這個包了。
執行下面的命令,開始編譯生成 tusd 對應的可執行文件。
cd $GOPATH\src\tusd go build -o tusd.exe cmd/tusd/main.go
第四個坑:執行 go build
命令以後,會再次報錯:
cmd\tusd\main.go:4:2: cannot find package "github.com/tus/tusd/cmd/tusd/cli" in any of: C:\Users\Administrator\go\src\tusd\vendor\github.com\tus\tusd\cmd\tusd\cli (vendor tree) c:\go\src\github.com\tus\tusd\cmd\tusd\cli (from $GOROOT) C:\Users\Administrator\go\src\github.com\tus\tusd\cmd\tusd\cli (from $GOPATH)
上網查了查,原來有人已經遇到過這個問題了,說是再手動安裝一下 github.com/tus/tusd/cmd/tusd/cli
這個包就行。好吧,那就執行下面的命令,手動安裝一下這個包:
go get -u github.com/tus/tusd/cmd/tusd/cli
安裝完所需的包以後,再次執行下面的命令,編譯代碼:
go build -o tusd.exe cmd/tusd/main.go
第五個坑:這回終於可以成功編譯了,不過這裏的命令和官網的仍是有點不同。go build
命令的 -o
參數後面必須指定文件名,在 Unix/Linux 系統裏,可執行文件是沒有擴展名的,可是在 Windows 上就不同了,一般是 .exe
,而 go build
命令的 -o
參數是按照 Unix/Linux 的習慣來的,因此在 Windows 下使用 go build -o abc
這樣的命令來編譯的話,是不會自動加上 .exe
這個擴展名的,須要明確寫上擴展名才能夠。
執行下面的命令,便可將 tusd 運行在指定的 IP 和端口上:
.\tusd.exe -host 127.0.0.1 -port 1088
git clone
就是把當前項目下載到當前路徑,好比本項目 tusd
,就是下載到當前目錄的 tusd
文件夾下。用 go get
則是把當前項目下載到相對路徑下,好比本項目就是下載到 $GOPATH\src\github.com\tus\tusd
這個路徑下。等等,若是我最開始不是克隆項目,而是用 go get
來下載安裝這個項目的話,是否是會省事不少?大坑啊!go build
的 -o
參數在 Windows 下,不會自動附加可執行文件的 .exe
擴展名。