亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長(zhǎng)資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    教你使用Golang和lua實(shí)現(xiàn)一個(gè)值班機(jī)器人

    下面由golang教程欄目給大家介紹使用Golang和lua實(shí)現(xiàn)一個(gè)值班機(jī)器人 ,希望對(duì)需要的朋友有所幫助!

    教你使用Golang和lua實(shí)現(xiàn)一個(gè)值班機(jī)器人

    我們?cè)诘捻?xiàng)目組呢,有一項(xiàng)工作是,收郵件(很大程度上使用郵件是為了存?zhèn)€底),然后從我們的系統(tǒng)里邊查一下相關(guān)信息,然后回復(fù)個(gè)郵件的工作。雖然工作量并不大,但是會(huì)把時(shí)間切的稀碎。為了拯救我的時(shí)間,所以做了一個(gè)郵件的值班機(jī)器人。讓他來(lái)頂替我自動(dòng)回復(fù)郵件,考慮到這個(gè)東西應(yīng)該也有不少人會(huì)用得到,所以就把這個(gè)東西分享出來(lái)。先把效果分享出來(lái)。

    服務(wù)器上就很簡(jiǎn)單,dutyrobot就是Golang編譯之后的框架。lua文件夾中就是使用lua編寫的業(yè)務(wù)邏輯。Data.json就是保存了一些相關(guān)的數(shù)據(jù),防止重啟之后,數(shù)據(jù)丟掉,比如說(shuō)Cookie信息。

    教你使用Golang和lua實(shí)現(xiàn)一個(gè)值班機(jī)器人

    用最基礎(chǔ)的alpine進(jìn)行啟動(dòng)一下,并且將相關(guān)的文件夾映射到容器里邊,然后在容器里邊啟動(dòng)軟件。這么做主要是為了讓鏡像能夠擁有自己的環(huán)境變量。

    教你使用Golang和lua實(shí)現(xiàn)一個(gè)值班機(jī)器人

    然后業(yè)務(wù)邏輯里邊定期,收郵件,然后判定業(yè)務(wù)邏輯,執(zhí)行對(duì)應(yīng)的lua腳本,然后回復(fù)郵件。

    教你使用Golang和lua實(shí)現(xiàn)一個(gè)值班機(jī)器人

    在順手往我們的內(nèi)部事務(wù)群里邊推一條相關(guān)結(jié)果。

    教你使用Golang和lua實(shí)現(xiàn)一個(gè)值班機(jī)器人

    其實(shí)我本職是C#程序員來(lái)著,做這個(gè)東西,最先也是使用C#來(lái)實(shí)現(xiàn)的,不過(guò)C#跟Lua相性不好,我沒有找到比較優(yōu)雅的類庫(kù)。要上Linux系統(tǒng),用.net core + C 調(diào)用lua的方式雖然也嘗試過(guò),但是我本身對(duì)這件事情還是非常虛的。Python的各種包安裝都給我搞蒙蔽了。所以最后就選用了Golang來(lái)寫底層函數(shù)公布給Lua,然后讓lua來(lái)寫各種業(yè)務(wù)邏輯的方式來(lái)實(shí)現(xiàn)整個(gè)項(xiàng)目??蚣懿糠致?,一旦寫完,改動(dòng)的幾率還是比較低的,并且Window交叉編譯Linux,直接就可以部署上線,連個(gè)環(huán)境都不用裝,簡(jiǎn)直爽歪歪。lua解釋性語(yǔ)言,出了啥都沒有以外其他的都挺好的。

    基礎(chǔ)框架都是通用的,所以可以直接放出來(lái),拿出來(lái)用。只需要關(guān)心自己的業(yè)務(wù)內(nèi)容就可以了。

    基礎(chǔ)框架:https://gitee.com/anxin1225/DutyRobotGo

    在這個(gè)框架里邊,我給lua提供了不少功能,主要包括收發(fā)郵件,發(fā)起網(wǎng)絡(luò)請(qǐng)求,發(fā)起網(wǎng)絡(luò)監(jiān)聽(甚至可以拿這個(gè)做底層做一個(gè)小型的API站,信我,我這么做過(guò)了已經(jīng)),臨時(shí)存?zhèn)€數(shù)據(jù),獲取環(huán)境變量,獲取文件內(nèi)容,再啟動(dòng)一個(gè)Lua容器(沒錯(cuò),lua又再起一個(gè)lua容器的能力),獲取當(dāng)前系統(tǒng)信息,cron定時(shí)任務(wù)。當(dāng)然如果你覺得不夠的話,還可以進(jìn)行二次擴(kuò)展,其實(shí)非常容易,我已經(jīng)寫了好多了,比著抄一下,很容易的。不過(guò)一般情況下不用擴(kuò)展了,我這邊就不深入講解框架部分了,畢竟,怎么做業(yè)務(wù)才是重點(diǎn)。

    然后,講一下Lua部分是怎么實(shí)現(xiàn)的。因?yàn)镚olang里邊的代碼是直接找到了main.lua進(jìn)行執(zhí)行的,我們也就從這個(gè)文件開始講起。

    教你使用Golang和lua實(shí)現(xiàn)一個(gè)值班機(jī)器人

    我將好多服務(wù)注冊(cè)了進(jìn)來(lái),究竟有哪些服務(wù)呢,還是得去看看框架里邊怎么寫的。Cron就是我寫的其中一個(gè)小功能。其實(shí)就是task任務(wù),對(duì)應(yīng)到框架部分呢可以查看tasks文件夾里去看具體的實(shí)現(xiàn),可以看到倆邊有兩個(gè)文件,其中task.go是Golang的語(yǔ)言函數(shù)task_4lua.go就是把Golang的函數(shù)公開給lua來(lái)調(diào)用的接口注冊(cè)的位置。

    教你使用Golang和lua實(shí)現(xiàn)一個(gè)值班機(jī)器人

    我們來(lái)看到task_4lua.go這個(gè)文件里邊,一般會(huì)存在一個(gè)函數(shù)叫做RegisterFunc_4lua就是注冊(cè)用的。

    教你使用Golang和lua實(shí)現(xiàn)一個(gè)值班機(jī)器人

    這就很眼熟了,Cron就是lua用的類的名字,下邊這個(gè)map就是他們對(duì)應(yīng)的需要調(diào)用的名字,后邊會(huì)對(duì)照著golang這邊的函數(shù),一般函數(shù)里邊我會(huì)寫上lua那邊應(yīng)該怎么調(diào)用。如果找不到的話,可以來(lái)框架這邊翻一翻,有驚喜也說(shuō)不定。

    教你使用Golang和lua實(shí)現(xiàn)一個(gè)值班機(jī)器人

    我的業(yè)務(wù)里邊。就是每分鐘接收一下,每5分鐘保存一下Cookie。真正的業(yè)務(wù)邏輯其實(shí)就寫在各個(gè)lua文件里邊。我們?nèi)タ匆幌略趺唇邮障⒑吞幚硐⒌摹?/p>

    這里邊就是簡(jiǎn)單的lua的業(yè)務(wù)邏輯了,收一下郵件,然后調(diào)用對(duì)應(yīng)的處理lua,處理完了就完事了。

    教你使用Golang和lua實(shí)現(xiàn)一個(gè)值班機(jī)器人

    教你使用Golang和lua實(shí)現(xiàn)一個(gè)值班機(jī)器人

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)