go語言使用protobuf

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

網上為什麼充斥著大量幾乎一模一樣而且不正確的教程???

媽的開啟一個關於golang和protobuf的教程,無非都是扯他媽的protobuf多麼多麼牛逼,xml多麼多麼傻逼,然後就是怎麼安裝protobuf,然後又是屎一樣的樣本。

安裝過程沒一個對的,我搜了那麼多部落格,全都是一個德行,我先寫一下ubuntu的安裝步驟,同時適用於mac和其他linux,而且保證是對的。

真的無力吐槽,先說正事,一會接著吐。

一、首先去 https://github.com/google/protobuf 下載protobuf,按照readme的步驟來編譯安裝。如果執行autogen.sh的過程中出現autoreconf not found的錯誤,說明沒有安裝automake,在ubuntu執行sudo apt-get install automake libtool就可以了,其他平台根據實際情況安裝。

二、執行 go get -u github.com/golang/protobuf/{proto, proto-gen-go} ,自動安裝proto-gen-go

三、把proto-gen-go複製到/usr/local/bin 或者其他路徑,只要在包含在PATH環境變數中就可以,為了方便protoc調用它。

四、寫一個xx.proto檔案,執行protoc --go_out=. xx.proto產生go語言的代碼,如果提示libprotoc.so找不到,需要把 /usr/local/lib 添加到LD_LIBRARY_PATH環境變數中。

 

按照這個步驟搞下來,應該都能編譯成功了,使用也很簡單,網上大量的屎樣本,主要是調用Marshal和Unmarshal來編碼和解碼。

那麼問題來了:

1、我用二進位傳輸訊息意義在哪?

        當然就是位元組少,傳輸成本小。

2、媽的二進位不可讀啊,怎麼解碼呢?

        調用Unmarshal函數,把對應類型的對象傳入,會自動把二進位解碼到傳入的對象。

3、拿到一大坨位元據,怎麼知道能解碼到哪個類呢?

        這個問題問得好,媽的沒找到任何地方有人提到這件事,強行忽略然後裝作會了嗎?在扯他媽的protobuf多麼多麼牛逼的時候都提到內建反射機制,能夠類型推導,到底怎麼推導你他媽怎麼不說啊???

4、難道只能互相知道要傳輸的類型,然後才能愉快的用protobuf嗎?

        知道了類型還用編碼幹毛啊?直接按照欄位順序硬拼在一起不就行嗎?還用protobuf幹毛???

 

總之,網上提到protobuf的,我不知道他們是不是真的用過protobuf,抱Google爸爸的大腿趕潮流並沒有錯,但是強行裝出一副深藏功與名的樣子是一種好風氣嗎?

最後,我還是建議,做網遊協議,還是自己實現序列化和還原序列化吧,無非就是加個類型id而已,這就算原始到令人髮指了??

下一步就是開始幹。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.