下面由golang教學專欄來介紹給大家使用Golang和lua實作一個值班機器人 ,希望對需要的朋友有幫助!
我們在的專案群組呢,有工作是,收郵件(很大程度上使用郵件是為了存個底),然後從我們的系統裡邊查一下相關訊息,然後回覆個郵件的工作。雖然工作量不大,但是會把時間切的稀碎。為了拯救我的時間,所以我做了一個郵件的值班機器人。讓他來頂替我自動回覆郵件,考慮到這個東西應該也有不少人會用得到,所以就把這個東西分享出來。先把效果分享出來。
伺服器上就很簡單,dutyrobot就是Golang編譯之後的框架。 lua資料夾中就是使用lua編寫的業務邏輯。 Data.json就是保存了一些相關的數據,防止重啟之後,數據丟掉,比如說Cookie資訊。
用最基礎的alpine啟動一下,並且將相關的資料夾對應到容器裡邊,然後在容器裡邊啟動軟體。這麼做主要是為了讓鏡像能夠擁有自己的環境變數。
接著業務邏輯裡邊定期,收郵件,然後判定業務邏輯,執行對應的lua腳本,然後回覆郵件。
在順手往我們的內部事務群組裡邊推一條相關結果。
#其實我本職是C#程式設計師來著,做這個東西,最先也是使用C#來實現的,不過C#跟Lua相性不好,我沒有找到比較優雅的類別庫。要上Linux系統,用.net core C 呼叫lua的方式雖然也嘗試過,但是我本身對這件事情還是非常虛的。 Python的各種套件安裝都給我搞蒙蔽了。所以最後就選用了Golang來寫底層函數公佈給Lua,然後讓lua來寫各種業務邏輯的方式來實現整個專案。框架部分嘛,一旦寫完,改動的幾率還是比較低的,並且Window交叉編譯Linux,直接就可以部署上線,連個環境都不用裝,簡直爽歪歪。 lua解釋性語言,出了啥都沒有以外其他的都挺好的。
基礎框架都是通用的,所以可以直接放出來,拿出來用。只需要關心自己的業務內容就可以了。
基礎架構:https://gitee.com/anxin1225/DutyRobotGo
在這個框架裡邊,我給lua提供了不少功能,主要包括收發郵件,發起網路請求,發起網路監聽(甚至可以拿這個做底層做一個小型的API站,信我,我這麼做了已經),臨時存個數據,獲取環境變量,獲取文件內容,再啟動一個Lua容器(沒錯,lua又再起一個lua容器的能力),獲取當前系統信息,cron定時任務。當然如果你覺得不夠的話,還可以進行二次擴展,其實非常容易,我已經寫了好多了,比著抄一下,很容易的。不過一般情況下不用擴展了,我這邊就不深入講解框架部分了,畢竟,怎麼做業務才是重點。
然後,講Lua部分是怎麼實現的。因為Golang裡邊的程式碼是直接找到了main.lua執行的,我們也就從這個檔案開始講起。
我將好多服務註冊了進來,究竟有哪些服務呢,還是得去看看框架裡邊怎麼寫的。 Cron就是我寫的其中一個小功能。其實就是task任務,對應到框架部分呢可以查看tasks文件夾裡去看具體的實現,可以看到倆邊有兩個文件,其中task.go是Golang的語言函數task_4lua.go就是把Golang的函數公開給lua來呼叫的介面註冊的位置。
我們來看到task_4lua.go這個檔案裡邊,通常會存在一個函數叫做RegisterFunc_4lua就是註冊用的。
這就很眼熟了,Cron就是lua用的類別的名字,下邊這個map就是他們對應的需要調用的名字,後邊會對照著golang這邊的函數,一般函數裡邊我會寫上lua那邊應該怎麼調用。如果找不到的話,可以來框架這邊翻一翻,有驚喜也說不定。
#我的業務裡邊。就是每分鐘接收一下,每5分鐘儲存一下Cookie。真正的業務邏輯其實寫在各個lua文件裡邊。我們去看一下怎麼接收訊息和處理訊息的。
這裡邊就是簡單的lua的業務邏輯了,收一下郵件,然後呼叫對應的處理lua,處理完了就完事了。
#
#以上是教你使用Golang和lua實現值班機器人的詳細內容。更多資訊請關注PHP中文網其他相關文章!