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

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

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ