我一直以來都是做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 協議》,轉載必須註明作者和本文連結