智慧線上客服系統原始碼GOFLY開發日誌- 2. 開發命令列應用

taoshihan發表於2022-02-12

我一直以來都是做PHP開發,除非是使用swoole框架,大部分PHP應用都是把程式碼傳到伺服器對應的目錄裡,啟動nginx+php-fpm來執行PHP程式碼。

golang和PHP是不一樣的,golang可以作為一個後端的服務監聽埠來執行,這個時候就要能在命令列中啟動和傳遞引數。

選用github.com/spf13/cobra 這個庫來處理命令列引數的解析。可以透過命令列把想要執行的不同動作區分開,不同的動作裡面又要傳遞不同的引數

比如我實現的功能是 ./go-fly-pro server 是開啟監聽埠服務,./go-fly-pro install 是匯入資料庫的指令碼,這個就是命令列的第二個引數區分不同的動作

命令的第三個到最後的引數是傳遞不同的配置引數,我實現了./go-fly-pro server -p 埠號 ,可以配置監聽不同的埠,這就是命令列應用的主要邏輯。

入口檔案是go-fly.go ,裡面就是直接呼叫cmd包的Execute方法

package main

import ( "go-fly-muti/cmd" )

func main() {
    cmd.Execute()
}

自定義的cmd包就是命令列應用的功能包,有入口方法,有全域性變數,有初始化動作

每個動作都是一個cobra.Command結構實體

package cmd

import ( "github.com/spf13/cobra"
    "log"
    "os" ) var rootCmd = &cobra.Command{
    Use: "go-fly-pro",
    Short: "go-fly-pro",
    Long:  `簡潔快速的GO語言線上客服系統GOFLY`,
}

func init() {
    rootCmd.AddCommand(serverCmd)
    rootCmd.AddCommand(installCmd)
    rootCmd.AddCommand(stopCmd)
    rootCmd.AddCommand(indexCmd)
}
func Execute() { if err := rootCmd.Execute(); err != nil {
        log.Println("執行命令引數錯誤:", err)
        os.Exit(1)
    }
}

這就是命令列入口檔案,後面還遇到了哪些問題和知識點將會繼續進行總結。

演示網站:
gofly.sopans.com/

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章