CLI Application trong Golang với Cobra
CLI - Command line interface
Là giao diện điều khiển máy tính bằng dòng lệnh được sử dụng để thực hiện các thao tác với phần mềm hoặc máy tính. Trong windows nó được gọi là Command prompt còn với Linux/Unix thì là Terminal
Cobra
Một cobra command được xây dựng dựa trên cấu trúc gồm các command, argunents và flag. Cấu trúc của một cobra command sẽ có cấu trúc như sau:
appName command args -flag
appName command -flag args
Ví dụ như:
git commit -m "update"
git checkout -b "cobra"
Initialize
Tạo một thư mục có tên là cli-go
mkdir cli-go
cd cli-go
Khởi tạo gomod
go mod tidy
Cài đặt thư viện cobra
go get -u github.com/spf13/cobra/cobra
init projoect với cobra
cobra-cli init
kết quả là cobra sẽ tự gen ra các file có cấu trúc như sau.
├── LICENSE
├── cmd
│ └── root.go
├── go.mod
├── go.sum
└── main.go
Giải thích:
Bây giờ main.go sẽ là entry point nơi mà các command gọi đến để thực thi các hàm trong cmd/root.go Bắt đầu với root.go trong một cobra command thì root command là lệnh gốc của tất cả các command. Ví dụ như:
go run main.go
go -> root command
run main.go -> child command
Trong file root.go sẽ thực thi root command và các command khác sẽ là child của root command này. Để ví dụ về việc thực thi hàm trong root command hãy un comment hàm sau.
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("Hello, world!")
},
Để chạy function này gõ trên terminal go run main.go cli-go Mọi thứ hoạt động có vẻ khá ôn.
Tự tạo mới command.
Giờ hãy tạo mới file có tên
calculator.go
├── LICENSE
├── cmd
│ ├── calculator.go
│ └── root.go
├── go.mod
├── go.sum
└── main.go
Thêm command vào Execute() như sau:
func Execute() {
rootCmd.AddCommand(calCulator)
err := rootCmd.Execute()
if err != nil {
os.Exit(1)
}
}
với nội dung file calculator.go
package cmd
import (
"fmt"
"github.com/spf13/cast"
"github.com/spf13/cobra"
)
var calCulator = &cobra.Command{
Use: "cal",
Short: "A brief description of your application",
Long: `A longer description that spans multiple lines and likely contains
examples and usage of using your application. For example:
Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.`,
// Uncomment the following line if your bare application
// has an action associated with it:
Run: func(cmd *cobra.Command, args []string) {
fmt.Println(cast.ToInt(args[0]) + cast.ToInt(args[1]))
},
}
giải thích về CLI này: đưa 2 args là 2 giá trị string vào và in ra terminal tổng. Kết quả khi run cli trên termial
go run main.go cal 1 1
kết quả:
2
Ứng dụng vào đâu?
- Chạy golang app bằng command line.
- Chạy các command của một service trên docker, k8s.
- Setup chạy cronjob, chạy các task theo giờ.
- Chạy script trong khi server đang hoạt động...
Kết
Cobra cli rất dễ sử dụng trong việc tạo ra cli app trên golang :DD Tham khảo: https://medium.com/@3n0ugh/creating-cli-in-go-with-cobra-d6f83dcbab1c
All rights reserved