- vừa được xem lúc

CLI Application trong Golang với Cobra

0 0 9

Người đăng: Dong Tran Quoc

Theo Viblo Asia

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

Bình luận

Bài viết tương tự

- vừa được xem lúc

gRPC - Nó là gì và có nên sử dụng hay không?

Nhân một ngày rảnh rỗi, mình ngồi đọc lại RPC cũng như gRPC viết lại để nhớ lâu hơn. Vấn đề là gì và tại sao cần nó .

0 0 132

- vừa được xem lúc

Embedded Template in Go

Getting Start. Part of developing a web application usually revolves around working with HTML as user interface.

0 0 57

- vừa được xem lúc

Tạo Resful API đơn giản với Echo framework và MySQL

1. Giới thiệu.

0 0 61

- vừa được xem lúc

Sử dụng goquery trong golang để crawler thông tin các website Việt Nam bị deface trên mirror-h.org

. Trong bài viết này, mình sẽ cùng mọi người khám phá một package thu thập dữ liệu có tên là goquery của golang. Mục tiêu chính của chương trình crawler này sẽ là lấy thông tin các website Việt Nam bị deface (là tấn công, phá hoại website, làm thay đổi giao diện hiển thị của một trang web, khi người

0 0 237

- vừa được xem lúc

Tạo ứng dụng craw dữ liệu bing với Golang, Mysql driver

Chào mọi người . Lâu lâu ta lại gặp nhau 1 lần, để tiếp tục series chia sẻ kiến thức về tech, hôm nay mình sẽ tìm hiểu và chia sẻ về 1 ngôn ngữ đang khá hot trong cộng đồng IT đó là Golang.

0 0 76

- vừa được xem lúc

Golang: Rest api and routing using MUX

Routing with MUX. Let's create a simple CRUD api for a blog site. # All . GET articles/ .

0 0 55