日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Golang开发手游服务器的感想

發布時間:2023/12/8 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Golang开发手游服务器的感想 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 從最初決定使用Golang開發游戲服務器(參考這里),到服務器基本成型,經過了兩個多禮拜的時間。這里記錄一下感想和心得。具體Golang的使用經驗將來有時間會再開篇文章來寫。

? ? ? ? 兩個禮拜的時間,完成了Golang的入門,服務器框架設計,功能的完整移植,從我個人角度來說,要給Golang和我自己100個贊。

? ? ? ? 最初我選定Golang就是考慮到它有以下優點;

1、靜態編譯型語言。這個是我最看重的,不選擇skynet(c+lua)和KBEngine(c++ python)有很大一個原因是動態腳本語言維護邏輯復雜了維護起來非常困難。 靜態語言基本編譯通過后就沒有太大問題了,剩下的就是思考不周導致的bug。

2、堪比python的開發效率。 ?不選java很大的一個原因是這個。 ?我不需要最優方案,也不需要最穩妥的方案,只需要一個合適的方案。

3、并發模型,可以輕易利用起多核。 不選Node.js的原因是callback還沒有真正完善的解決方案

4、有現成的開源服務器。即便不說有成功案例,至少是有可行的案例

5、優異的跨平臺能力。 ?我想部署KBEngine到linux,結果python編譯了半天都沒成功。(順便吐槽下linux,不同發行版本,軟件源中的軟件名不一樣,操作命令和習慣也不一樣,簡直是作)

6、部署方便,只要把執行文件拷貝一下就可以了,沒有太多的依賴或者動態庫。同樣參考上一條。

7、支持protobuf、mongoDB。KBEngine中我一直想做這個修改,不過改動太大,完全Hold不住。這個不算特別的優點,因為很多其他的方案也都支持,只不過恰好不謀而合而已。



? ? ? ?而最后的結果也基本滿意。

? ? ? ?Golang并不是一個完美的語言,甚至從c++系轉過來的人會感覺很多不爽,尤其是詭異的變量命名規則。

? ? ? ?不過Golang是一個解決實際問題的工業級語言。可能語法上面看各種粗糙,但是習慣后使用起來非常順手。它在解決網絡大并發問題的基礎上(go 協程),同時兼顧了靜態語言的優勢和堪比Python的開發效率,從這點上來說再怎么稱贊它都不為過。 在這個巨大優勢的前提下,其他的一些不爽都是可以接受和忽略的。 其他的如Rust、Scala等,雖然語法、語義更棒,但是并不能解決我碰到的實際問題(并不是說它不能解決任何問題),只有Golang將這三者完美的融合在一起。


? ? ? ? 關于Golang的入門,我總結了三點需要注意的:

1、包和GOPATH。 ?

? ? ? Golang并沒有項目工程文件,它通過自動解析包引用構建整個項目。一個文件夾對應一個包,一個包對應一個模塊,模塊內可以定義各種結構和函數。 ?而main包就是程序的主入口,它包含一個main函數。?

? ? ? GOPATH是go查找包的路徑,我現在設置兩個路徑,一個是當前項目路徑,一個是公共包的路徑。go在編譯的時候會依次查找對應路徑下有沒有這個包。 ?go build和go install可以構建程序。 一個項目中可以包含多個main包,也就對應多個進程。比如我的服務器項目中就對應login gate game三個進程。

? ? ? 理解了包和GOPATH就可以非常方便的維護整個項目

2、指針和內存

? ? ? Golang中有指針的概念(這點我并不喜歡,感覺還不如像c#或者java一樣直接干掉指針,只有對象的概念)。但是指針的功能極度弱化,你可以像正常對象調用一樣使用指針,不能操作指針的內存,也不能對指針進行自增等操作。 指針的意義就是傳遞參數是防止值傳遞,也就說Golang的指針就相當于c++中的引用。

? ? ? 同樣的,你并不能控制一個對象是在堆上創建還是在棧上創建。Golang中new(TestStruct)和&TestStruct{}是完全等價的寫法。只不過后一個寫法可以同時進行初始化操作。 創建出的內存都是交給GC來進行管理的。 所以返回局部對象的指針是完全合法和正確的。


3、Struct和interface{}

type User Struct {name string }func (self *User) login(account string, token string) { }
? ? ?通過這樣的寫法就定義了一個結構User,并且這個結構有一個成員函數login。 ?通過包、Struct、包函數、成員函數這四個元素就可以輕松的處理對象和框架設計。

? ? ? 接口是Golang中非常強大的語法特性,一個Struct只要實現了一個接口(函數名和參數相同)就可以當做這個接口來使用。 通過接口,大大減輕了設計負擔,不需要設計模式,一樣可以寫出高質量的優雅的代碼

? ? ??



總結

以上是生活随笔為你收集整理的使用Golang开发手游服务器的感想的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。