最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解go程序如何在windows服務(wù)中開(kāi)啟和關(guān)閉

 更新時(shí)間:2024年07月26日 09:08:29   作者:Lucky小小吳  
這篇文章主要介紹了一個(gè)go程序,如何在windows服務(wù)中優(yōu)雅開(kāi)啟和關(guān)閉,文中通過(guò)代碼示例和圖文講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下

本篇主要是講述一個(gè)go程序,如何在windows服務(wù)中優(yōu)雅開(kāi)啟和關(guān)閉,廢話不多說(shuō),開(kāi)搞!??!
使用方式:go程序 + net服務(wù)啟動(dòng)

Ⅰ 開(kāi)篇不利

Windows go進(jìn)程編譯后,為一個(gè).exe文件,直接執(zhí)行即可運(yùn)行

 net start tamper_proof_refactored

啟動(dòng)后,發(fā)現(xiàn)windows服務(wù)根本不認(rèn)識(shí)這個(gè)go二進(jìn)制文件,完全起不來(lái)

注意:因?yàn)槠胀ǖ某绦驘o(wú)法處理Windows服務(wù)特有的消息,普通的Go程序也無(wú)法在服務(wù)模式運(yùn)行。

Ⅱ 需求拆解

現(xiàn)在知道一個(gè)問(wèn)題了:普通的go程序啟動(dòng)服務(wù)后,服務(wù)會(huì)出現(xiàn)"無(wú)響應(yīng)控制功能"

現(xiàn)在是想要實(shí)現(xiàn)什么?
go程序編譯的二進(jìn)制文件,可以被當(dāng)作windows服務(wù),穩(wěn)定在后臺(tái)執(zhí)行,并可優(yōu)雅開(kāi)啟和關(guān)閉

Ⅲ 具體實(shí)現(xiàn)

找到一個(gè)go的官方庫(kù),用于實(shí)現(xiàn)windows服務(wù)注冊(cè)和啟動(dòng)的

golang.org/x/sys/windows/svc

具體實(shí)現(xiàn)邏輯如下

func (m *myService) Execute(args []string, r <-chan svc.ChangeRequest, changes chan<- svc.Status) (ssec bool, errno uint32) {
        const cmdsAccepted = svc.AcceptStop | svc.AcceptShutdown | svc.AcceptPauseAndContinue
        changes <- svc.Status{State: svc.StartPending}
        go Star() // 啟動(dòng)go程序的主程序【需要有一個(gè)主入口函數(shù)】
        changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted}
loop:
        for {
                c := <-r
                switch c.Cmd {
                case svc.Interrogate:
                        changes <- c.CurrentStatus
                case svc.Stop, svc.Shutdown:
                        Exit() // 停止你的程序
                        break loop
                case svc.Pause:
                        // 添加你的程序的暫停邏輯
                        changes <- svc.Status{State: svc.Paused, Accepts: cmdsAccepted}
                case svc.Continue:
                        // 添加你的程序的繼續(xù)邏輯
                        changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted}
                default:
                        log.Printf("unexpected control request #%d", c)
                }
        }
        changes <- svc.Status{State: svc.StopPending}
        return
}
func RunService() {
        err := svc.Run("tamper_proof_refactored", &myService{})
        if err != nil {
                log.Fatal(err)
        }
        fmt.Println("服務(wù)已啟動(dòng)")
}

啟動(dòng)后,直接終端查看下效果

寫(xiě)了一個(gè)服務(wù)狀態(tài)判斷,打印出的服務(wù)當(dāng)前狀態(tài)日志

寫(xiě)完后,就可以正常的服務(wù)啟動(dòng)和關(guān)閉了,下面是詳細(xì)的服務(wù)啟動(dòng)/關(guān)閉指令

sc create MyService binPath= "C:\path\to\your\program\tamper_proof_XXXX.exe"  //創(chuàng)建服務(wù)
net start MyService   // 開(kāi)啟服務(wù)
net stop   myserver   // 暫停服務(wù)
sc  delete myserver   // 刪除服務(wù)

到此這篇關(guān)于詳解go程序如何在windows服務(wù)中開(kāi)啟和關(guān)閉的文章就介紹到這了,更多相關(guān)go windows服務(wù)開(kāi)啟和關(guān)閉內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang 實(shí)現(xiàn)復(fù)制文件夾同時(shí)復(fù)制文件

    Golang 實(shí)現(xiàn)復(fù)制文件夾同時(shí)復(fù)制文件

    這篇文章主要介紹了Golang 實(shí)現(xiàn)復(fù)制文件夾同時(shí)復(fù)制文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Golang?鎖原理的簡(jiǎn)單實(shí)現(xiàn)

    Golang?鎖原理的簡(jiǎn)單實(shí)現(xiàn)

    本文主要介紹了Golang?鎖原理的簡(jiǎn)單實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • golang?用msgpack高效序列化的案例

    golang?用msgpack高效序列化的案例

    msgpack是一個(gè)非常受歡迎的Go序列化庫(kù),具有很好的跨語(yǔ)言支持,這篇文章主要介紹了golang?用msgpack高效序列化的相關(guān)知識(shí),需要的朋友可以參考下
    2023-05-05
  • Go+Redis實(shí)現(xiàn)常見(jiàn)限流算法的示例代碼

    Go+Redis實(shí)現(xiàn)常見(jiàn)限流算法的示例代碼

    限流是項(xiàng)目中經(jīng)常需要使用到的一種工具,一般用于限制用戶的請(qǐng)求的頻率,也可以避免瞬間流量過(guò)大導(dǎo)致系統(tǒng)崩潰,或者穩(wěn)定消息處理速率。這篇文章主要是使用Go+Redis實(shí)現(xiàn)常見(jiàn)的限流算法,需要的可以參考一下
    2023-04-04
  • 基于Go語(yǔ)言實(shí)現(xiàn)一個(gè)目錄樹(shù)打印工具

    基于Go語(yǔ)言實(shí)現(xiàn)一個(gè)目錄樹(shù)打印工具

    在日常開(kāi)發(fā)中,我們經(jīng)常需要可視化項(xiàng)目的目錄結(jié)構(gòu),下面小編將介紹一款用Go語(yǔ)言開(kāi)發(fā)的目錄樹(shù)打印工具,它不僅能生成美觀的目錄結(jié)構(gòu)圖,還提供多種實(shí)用功能
    2025-06-06
  • golang容易導(dǎo)致內(nèi)存泄漏的6種情況匯總

    golang容易導(dǎo)致內(nèi)存泄漏的6種情況匯總

    內(nèi)存泄漏是我們?cè)谏a(chǎn)環(huán)境中必須面臨的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于golang容易導(dǎo)致內(nèi)存泄漏的6種情況,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • Go語(yǔ)言中l(wèi)og日志庫(kù)的介紹

    Go語(yǔ)言中l(wèi)og日志庫(kù)的介紹

    本文給大家介紹Go語(yǔ)言中l(wèi)og日志庫(kù)的概念使用技巧,log包定義了Logger類(lèi)型,該類(lèi)型提供了一些格式化輸出的方法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-10-10
  • go語(yǔ)言切片去重的3種方式

    go語(yǔ)言切片去重的3種方式

    go語(yǔ)言中的切片是使用非常頻繁的一個(gè)數(shù)據(jù)結(jié)構(gòu),本文主要介紹了go語(yǔ)言切片去重的3種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Go中strings包的基本使用示例代碼

    Go中strings包的基本使用示例代碼

    本文詳細(xì)介紹了Go語(yǔ)言中strings包的基本使用方法,包括字符串的前綴、后綴判斷,字符串包含、索引查找、字符串替換、計(jì)數(shù)、重復(fù)、大小寫(xiě)轉(zhuǎn)換、修剪、分割、拼接以及數(shù)據(jù)類(lèi)型轉(zhuǎn)換等功能,示例代碼豐富,適合初學(xué)者和需要使用字符串處理功能的開(kāi)發(fā)者參考學(xué)習(xí)
    2024-10-10
  • Golang使用CGO與Plugin技術(shù)運(yùn)行加載C動(dòng)態(tài)庫(kù)

    Golang使用CGO與Plugin技術(shù)運(yùn)行加載C動(dòng)態(tài)庫(kù)

    這篇文章主要介紹了Golang使用CGO與Plugin技術(shù)運(yùn)行加載C動(dòng)態(tài)庫(kù),Golang?程序在運(yùn)行時(shí)加載C動(dòng)態(tài)庫(kù)的技術(shù),跳過(guò)了Golang項(xiàng)目編譯階段需要鏈接C動(dòng)態(tài)庫(kù)的過(guò)程,提高了Golang項(xiàng)目開(kāi)發(fā)部署的靈活性
    2022-07-07

最新評(píng)論

昌都县| 朔州市| 姚安县| 乐业县| 福泉市| 芦山县| 丰城市| 富阳市| 富阳市| 灵台县| 慈利县| 景洪市| 吴川市| 丘北县| 集安市| 九江市| 西安市| 东辽县| 新闻| 四川省| 梓潼县| 安仁县| 防城港市| 盘山县| 化德县| 平泉县| 成都市| 永定县| 南阳市| 东乌| 廊坊市| 易门县| 内黄县| 平陆县| 佛山市| 宜兴市| 杭锦旗| 桂阳县| 比如县| 闻喜县| 太和县|