TarsGo初體驗

遇到的坑

README.md很糟心,有以下問題

  • 代碼錯誤(根本編譯不過);
  • 配置文件錯誤;
  • 幫助文檔和實際生成的代碼并不致【畢竟剛開源,不完善算是正常現(xiàn)象】。

讓第一個Demo跑起來

安裝

環(huán)境信息

  • 操作系統(tǒng):CentOS Linux release 7.3.1611 (Core)
  • golang版本:go1.9.2 linux/amd64
  • 內(nèi)核:Linux 3.10.0-514.21.1.el7.x86_64
  • gcc版本:gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)
  • 已正確配置GOPATH環(huán)境變量

TarsGo

$ go get -u -v github.com/TarsCloud/TarsGo/tars
github.com/TarsCloud/TarsGo (download)
github.com/TarsCloud/TarsGo/tars/protocol/res/basef
github.com/TarsCloud/TarsGo/tars/util/gpool
github.com/TarsCloud/TarsGo/tars/util/tools
github.com/TarsCloud/TarsGo/tars/util/set
github.com/TarsCloud/TarsGo/tars/util/rtimer
github.com/TarsCloud/TarsGo/tars/protocol/codec
github.com/TarsCloud/TarsGo/tars/util/current
github.com/TarsCloud/TarsGo/tars/util/rogger
github.com/TarsCloud/TarsGo/tars/util/conf
github.com/TarsCloud/TarsGo/tars/util/debug
github.com/TarsCloud/TarsGo/tars/protocol/res/requestf
github.com/TarsCloud/TarsGo/tars/protocol/res/endpointf
github.com/TarsCloud/TarsGo/tars/transport
github.com/TarsCloud/TarsGo/tars/util/endpoint
github.com/TarsCloud/TarsGo/tars/model
github.com/TarsCloud/TarsGo/tars/protocol/res/adminf
github.com/TarsCloud/TarsGo/tars/protocol/res/configf
github.com/TarsCloud/TarsGo/tars/protocol/res/logf
github.com/TarsCloud/TarsGo/tars/protocol/res/nodef
github.com/TarsCloud/TarsGo/tars/protocol/res/notifyf
github.com/TarsCloud/TarsGo/tars/protocol/res/propertyf
github.com/TarsCloud/TarsGo/tars/protocol/res/queryf
github.com/TarsCloud/TarsGo/tars/protocol/res/statf
github.com/TarsCloud/TarsGo/tars

tars2go

將tars接口文件轉(zhuǎn)換成go目標文件的工具,必須要安裝

$ cd $GOPATH/src/github.com/TarsCloud/TarsGo/tars/tools/tars2go && go build && go install

測試tars2go

$ tars2go
Usage: tars2go [flags] *.tars
       tars2go -I tars/protocol/res/endpoint [-I ...] QueryF.tars
  -E    Generate code before fmt for troubleshooting
  -I value
        Specify a specific import path
  -add-servant
        Generate AddServant function (default true)
  -outdir string
        which dir to put generated code
  -tarsPath string
        Specify the tars source path. (default "github.com/TarsCloud/TarsGo/tars")

如果提示的是“command not found”,則安裝異常

生成第一個測試Demon

TarsGo比較人性化,提供了一個生成Demo的工具

$ cd $GOPATH/src/github.com/TarsCloud/TarsGo/tars/tools
$ ./create_tars_server.sh TestApp HelloGo SayHello
[create server: TestApp.HelloGo ...]
[mkdir: /home/luojie/gopath//src/TestApp/HelloGo/]
>>>Now doing:./Servant.tars >>>>
>>>Now doing:./start.sh >>>>
>>>Now doing:./Server.go >>>>
>>>Now doing:./Server.conf >>>>
>>>Now doing:./makefile >>>>
>>>Now doing:./ServantImp.go >>>>
>>>Now doing:client/client.go >>>>
>>>Now doing:vendor/vendor.json >>>>
>>>Now doing:debugtool/dumpstack.go >>>>
>>> Great!Done! You can jump in /home/luojie/gopath/src/TestApp/HelloGo
>>> Tips: After editing the Tars file, execute the following cmd to automatically generate golang files.
>>>       /home/luojie/gopath//bin/tars2go *.tars

查看生成的代碼

如果生成的步驟正常,將會在$GOPATH/src/目錄下面的生成TestApp目錄

目錄結(jié)構(gòu)如下:

$ tree
.
`-- HelloGo
    |-- client
    |   `-- client.go
    |-- debugtool
    |   `-- dumpstack.go
    |-- HelloGo
    |-- HelloGo.conf
    |-- HelloGo.go
    |-- HelloGo.tgz
    |-- makefile
    |-- SayHelloImp.go
    |-- SayHello.tars
    |-- start.sh
    |-- TestApp
    |   `-- SayHello_IF.go
    `-- vendor
        |-- _APP_
        |   `-- _SERVANT__IF.go
        |-- TestApp
        |   `-- SayHello_IF.go
        `-- vendor.json

7 directories, 14 files

說明

  • SayHello.tars是接口文件,編譯時由tars2go生成go文件
  • HelloGo.conf是服務啟動的的配置文件[先可以不用理會]
  • start.sh是服務啟動腳本,會先執(zhí)行make,再啟動服務

完善實現(xiàn)

$ cat SayHelloImp.go 
package main

type SayHelloImp struct {
}

func (imp *SayHelloImp) Add(a int32, b int32, c *int32) (int32, error) {
    //Doing something in your function
    //...
    return 0, nil
}
func (imp *SayHelloImp) Sub(a int32, b int32, c *int32) (int32, error) {
    //Doing something in your function
    //...
    return 0, nil
}

幫助手冊讓我們生成的SayHello程序,接口竟然變成了Add和Sub,所以,看到SayHello的時候,不要覺得奇怪
請自行補充缺少的代碼

編譯代碼

$ cd HelloGo/
$ make && make tar
/home/luojie/gopath//bin/tars2go -outdir=vendor   SayHello.tars
/home/luojie/software/go//bin/go build  -o HelloGo
/home/luojie/gopath//bin/tars2go -outdir=vendor   SayHello.tars
/home/luojie/software/go//bin/go build  -o HelloGo
HelloGo/
HelloGo/client/
HelloGo/client/client.go
HelloGo/HelloGo
‘HelloGo.tgz’ -> ‘HelloGo.20190122213710.tgz’
tar cvfz HelloGo.tgz ...

出現(xiàn)以上的結(jié)果,說明編譯正常。

啟動服務

可直接運行start.sh或者執(zhí)行以下命令,讓服務在后臺啟動

$ ./HelloGo --config=HelloGo.conf &

注意:直接運行start.sh時,會給人一種假像,好像卡住了

啟動客戶端

$ cd client
$ go run client.go
0 369

個人感受

  • 雖然幫助文檔讓人很蛋疼
  • 但是提供的這些工具功能還是非常強大的
  • 可以讓新手最快體驗tarsGo帶來的便利

寫在最后

  • 如果你的代碼無法正常編譯,請根據(jù)平臺調(diào)整相關(guān)參數(shù),或者手動編譯【例如:ubuntu18.04中make時會出錯】
  • 遇到問題時,請仔細閱讀錯誤信息,你遇到的問題,萬千網(wǎng)友早已遇到,百度/谷歌可以找到答案
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容