本文目錄一覽:
如何在樹莓派上從源代碼構建Golang
第一步是安裝Mercurial,這是Google用來管理Go源代碼的版本控制系統。
sudo apt-get install -y mercurial
對於Mercurial系統來說,其主要的命令行接口是hg,有了這個你就能下載Golang的源代碼。下面的命令將把構建Golang所必須的源代碼下載到/usr/local/go目錄中去:
sudo hg clone -u default
這一過程大約需要10分鐘,取決於你的網速有多快了。一旦下載完成,你就可以開始構建的過程了。用cd命令將當前目錄修改為/usr/local/go/src,然後開始構建過程:
sudo ./all.bash
構建過程中會在終端上輸出很多內容,大部分都是一些信息提示。整個構建過程大概需要90分鐘到2小時。
構建進程會提示我們將Go的二進制包所在的目錄添加到系統PATH中去。要做到這一點你需要編輯.profile文件,每次你創建一個新的shell會話時,Bash都會處理這個文件。用cd命令將你的當前目錄切換回home,使用nano編輯器編輯.profile文件:
nano .profile
在文件最底部,添加如下這行:
export PATH=$PATH:/usr/local/go/bin
鍵入CTRL + X來退出nano編輯器,然後輸入Y來確定編輯過的文件已保存。按下ENTER鍵來保持當前文件名不變。
你需要退出當前的終端然後重新開啟另一個(如果你用的是桌面環境),或者也可以登出再登入(如果你用的是純命令行界面)。
要驗證Go是否安裝正確,可以創建一個名為hello.go的文件,然後寫下如下代碼(著名的hello world又來了):
package main
import “fmt”
func main() {
fmt.Printf(“Hello Make Tech Easier!\n”)
}
要運行它,請在終端上輸入:
1
go run hello.go
程序的輸出結果是一行文本:Hello Make Tech Easier!
golang 怎麼在mac下生成ubuntu
安裝go
倉庫安裝
$ sudo apt-get install golang
源碼安裝
安裝gcc工具,因為golang有些功能是使用c寫的,所以構建golang的編譯是必須的
$ sudo apt-get install bison gawk gcc libc6-dev make
安裝mercurial工具,目的使用hg命令來提取golang的源代碼
$ sudo apt-get install mercurial
代取提取,如果網速比較慢的話,此步要多花點時間
$ hg clone -r release go
編譯golang
$ cd go/src
$ ./all.bash
gvm安裝
$ sudo apt-get install curl Git mercurial make binutils bison gcc build-essential
$ bash (curl -s -S -L )
安裝完終端會提示(按提示輸入)
Cloning from to /home/c3t/.gvm
Created profile for existing install of Go at “/usr/lib/go”
Installed GVM v1.0.22
Please restart your terminal session or to get started right away run
`source /home/root/.gvm/scripts/gvm`123456123456
$ source /home/root/.gvm/scripts/gvm
gvm安裝完成
$ gvm version
列出所有支持的版本
$ gvm listall
下載源碼編譯安裝 go1.4
$ gvm install go1.4
使用go1.4
$ gvm use go1.4
若想安裝go1.5.2
$ gvm install go1.5.2
開機默認使用1.5.2
$ gvm use go1.5.2 –default
列出已安裝版本
$ gvm list
gRPC入坑記
概要
由於gRPC主要是谷歌開發的,由於一些已知的原因,gRPC跑demo還是不那麼順利的。單獨寫這一篇,主要是gRPC安裝過程中的坑太多了,記錄下來讓大家少走彎路。
主要的坑:
本文講解gRPC demo的同時,會介紹如何解決這些坑。本文對應的Github地址: 。該倉庫存儲了demo示例,以及部分系統編譯好的二進制包,大家覺得有些步驟里耗時實在太長了,可以直接clone該倉庫,複製二進制包到對應目錄(僅限測試開發,生產環境還是老老實實自己編譯吧)。
升級GCC
gRPC命令行工具編譯需要使用 GCC4.8及以上版本。CentOS6系列的內置版本是GCC4.7。
如果你的系統GCC版本=4.8,可以忽略本節。如果僅使用golang、java,請忽略本節。
如果需要升級gcc至4.8或更高版本,建議直接採用安裝SCL源之後安裝devtoolset-6(devtoolset-6目前gcc版本為6.3),因為devtoolset-4及之前的版本都已經結束支持,只能通過其他方法安裝。
升級到gcc 6.3:
需要注意的是scl命令啟用只是 臨時 的,退出shell或重啟就會恢復原系統gcc版本。如果要長期使用gcc 6.3的話:
這樣退出shell重新打開就是新版的gcc了。其它版本同理。
升級到gcc 7.3:
已經停止支持的devtoolset4(gcc 5.2)及之前版本的安裝方法,可能比較慢,大家感興趣的話可以嘗試。
編譯gRPC命令行工具
gRPC分C、JAVA、GO、NodeJS版本,C版本包括C++, Python, Ruby, Objective-C, PHP, C#,這些語言都是基於C版本開發的,共用代碼庫一個代碼庫。
如果使用C版本的gRPC,最終要從源碼里編譯出下列工具:
這些工具作為插件供proto編譯器使用。需要先下載 grpc/grpc github上的源碼。
這裡有2個坑:
1、grpc/grpc倉庫比較大,鑒於國內訪問的網速,建議使用國內鏡像。碼雲()提供了同步更新的鏡像地址:
這樣下載速度提高了不少。
2、git submodule update這個命令實際就是在下載.gitmodules文件里定義的第三方依賴項到third_party目錄,這個依賴項有很多,大家可以打開.gitmodules文件查看下詳情。依賴的倉庫都在github上,下載沒幾個小時是下載不下來的,就等着慢慢下載吧。
回頭想想,我們花費了很多時間,結果只是為了得到grpc的proto編譯插件。
PHP相關支持
PHP暫時不支持作為grpc的服務端。作為客戶端是可以的,需要機器安裝:
其中protoc和protobuf c擴展已經在 Protobuf 小試牛刀 介紹過了,這裡不再贅述。上一小節里如果安裝成功,那麼grpc_php_plugin也是有了的。下面介紹如何安裝PHP版的gRPC庫。
安裝grpc c擴展:
要求:GCC編譯器需要4.8及以上版本。可以使用pecl安裝:
也可以指定版本:
或者下載源碼()安裝:
grpc/grpc代碼庫里也有PHP擴展的C源碼,在grpc/src/php/ext/grpc目錄,進去也可以直接編譯。
編譯完成後在php.ini里添加,使用php –ri grpc可以查看信息。
安裝完C擴展後,還需要使用composer安裝grpc的庫:
gRPC示例
編寫gRPC proto
一共定義了三個文件:
其中 User 作為 Model定義,Response 用於 RPC統一返回定義,GreeterService 則是服務接口定義。
限於篇幅,proto文件詳見 倉庫的proto目錄。
GreeterService.proto文件內容如下:
這裏面定義了一個service,相當於定義了一個服務接口,我們把方法名、參數定義好了,後面需要去實現它。由於gRPC不支持PHP作為服務端,這裡我們使用Golang作為服務端。
首先需要使用proto工具編譯出golang的代碼:
執行成功,會在 Pb_Go目錄里生成Go代碼:
如果需要生成PHP客戶端的代碼,則需要使用grpc php的命令行工具grpc_php_plugin,前面小結如果執行成功,這個工具已經有了。然後:
最終生成的文件:
注意:編譯那裡如果我們不加–grpc_out=../$out –plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin,生成的PHP類是沒有GreeterClient的。這個文件是gRPC編譯工具自動生成的,用於連接gRPC服務端。
go編寫服務
我們用Golang寫服務端。上面雖然生成了Golang的部分代碼,但真正的服務還沒有寫呢。
main.go
首先我們新建個main.go,代碼不多,我直接貼出來:
然後就可以編譯了。
有個大坑:go build main.go的時候會先下載go.mod里定義的依賴(依賴比較多,詳情查看:),其中下面這條非常慢,倉庫太大了,雖然重定向到github:
為了快速下載,我在碼雲上做了鏡像,地址:gitee.com/52fhy/google-api-go-client 。改了之後下載快多了。
編譯成功後,生成了二進制文件main。我們可以直接運行:
go test
為了測試我們寫的服務是否正常,可以寫測試用例:
test_client.go
運行:
運行有點慢,感覺依賴的庫多了。
php客戶端
使用gRPC PHP客戶端,確保你已經安裝了:
示例:
client_test.php
運行後輸出:
常見問題
1、CentOS6使用 go mod獲取第三方依賴包unknown revision xxx錯誤
解決:其實go mod調用鏈中會用到一些git指令,當git版本比較舊時,調用失敗產生錯誤,並給出歧義的提示信息。方法就是升級git版本,CentOS6自帶的git是1.7版本。升級完畢後,再嘗試go mod。
快速升級方法:
centos6:
2、PHP報錯:Fatal error: Class ‘Google\Protobuf\Internal\Message’ not found
解決:請安裝PHP的protobuf c擴展。
3、PHP報錯:Fatal error: Class ‘\Grpc\BaseStub’ not found
解決:使用composer require grpc/grpc安裝grpc。另外對應的grpc C擴展也要安裝。
4、下載 github release包很慢怎麼辦?
解決:下載Mac版 Free Download Manager 下載工具可以解決Github 下載緩慢或失敗問題。速度嗖嗖的。
參考
1、為CentOS 6、7升級gcc至4.8、4.9、5.2、6.3、7.3等高版本
2、centos 6.x/7.x使用yum升級git版本 – 夜空
3、Protobuf 小試牛刀 – 飛鴻影
(本文完)
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/270524.html