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

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=

Bài 1 – React Native DevOps các khái niệm và các cài đặt căn bản

Hướng dẫn setup jenkins agent để bắt đầu build mobile bằng jenkins cho devloper an t

Chuyển đổi từ monolith sang microservices qua ví dụ

1. Why microservices? Microservices là kiến trúc hệ thống phần mềm hướng dịch vụ,