Chuyển đến các gói cho ứng dụng CLI tiếp theo của bạn
Giao diện dòng lệnh (CLI) vẫn còn phổ biến ngay cả khi đối mặt với Giao diện người dùng đồ họa (GUI) và các thành phần trực quan tương tác của chúng. CLI vẫn được sử dụng do tính đơn giản, dễ dàng, tốc độ và ít tài nguyên hơn cần thiết để thiết lập một ứng dụng CLI.
Hầu hết các ứng dụng CLI chạy trên thiết bị đầu cuối hoặc dòng lệnh của hệ điều hành, tăng tính linh hoạt mà không yêu cầu nhiều tài nguyên như GUI.
Bạn có thể xây dựng CLI với các ngôn ngữ phổ biến từ Python đến C ++, Rust và Go. Hầu hết các ngôn ngữ đều cung cấp các gói để xây dựng ứng dụng CLI mà không cần phụ thuộc bên ngoài.
Mục Lục
Đi và ứng dụng dòng lệnh
Một trong những trường hợp sử dụng dự kiến cho ngôn ngữ lập trình Go là xây dựng các CLI tương tác hiệu quả. Trong những năm qua, cờ vây đã đạt được sức hút trong lĩnh vực này.
Go hỗ trợ các ứng dụng CLI phổ biến như Docker CLI, Hugo, GitHub CLI, v.v. Go là một trong những ngôn ngữ ưa thích để xây dựng các ứng dụng CLI, nhờ sự hỗ trợ hạng nhất cho chúng cùng với hiệu suất của nó.
Có một lá cờ gói để phân tích cú pháp dòng lệnh, nhưng nó thiếu nhiều chức năng mà bạn sẽ cần để xây dựng các ứng dụng dòng lệnh hiện đại. Ngoài ra, phát triển các ứng dụng CLI với lá cờ gói có thể phức tạp khi kích thước ứng dụng của bạn tăng lên và bạn kết hợp nhiều tính năng hơn.
Hệ sinh thái Go có nhiều gói uy tín để xây dựng CLI, với các tính năng giúp giảm thời gian phát triển của bạn.
Gói rắn hổ mang
Cobra là một trong những gói phổ biến nhất để xây dựng CLI trong hệ sinh thái cờ vây và hơn thế nữa. Cobra là một gói để tạo các ứng dụng CLI hiện đại, tương tác trong mọi môi trường.
Cobra cung cấp một giao diện đơn giản để xây dựng CLI theo tiêu chuẩn ngành tương tự như các công cụ Go và Git. Cobra hỗ trợ nhiều ứng dụng CLI mà bạn đã tương tác, bao gồm Docker, Kubernetes, Twitch, Hugo và một loạt các ứng dụng khác.
Cobra là một công cụ dựa trên lệnh con dễ sử dụng. Nó hỗ trợ các cờ tuân thủ POSIX, các lệnh con lồng nhau và các cờ toàn cục, cục bộ và phân tầng.
Cobra cũng hỗ trợ các đề xuất thông minh, tạo trợ giúp tự động, nhận dạng cờ và bí danh lệnh. Nó cho phép tự động hoàn thành shell trên Bash, Powershell, Fish và Zsh, đồng thời tích hợp với gói viper cho các ứng dụng 12 yếu tố.
Chạy lệnh này trong phần cuối của thư mục làm việc của bạn để cài đặt phiên bản mới nhất của gói Cobra và các gói phụ thuộc của nó.
go get -u github.com/spf13/cobra@latest
Cobra cung cấp một ứng dụng CLI để phát triển nhanh hơn và dễ dàng hơn. Gói Cobra — cli tạo mã bảng soạn sẵn mà bạn có thể định cấu hình để thêm các lệnh mới vào ứng dụng của mình mà không phức tạp.
Chạy lệnh này trong phần cuối của thư mục làm việc của bạn để cài đặt phiên bản mới nhất của gói Cobra-cli.
go install github.com/spf13/cobra-cli@latest
Bạn sẽ cần đặt biến GOPATH vào thư mục làm việc của mình để sử dụng trình tạo Cobra (Cobra-cli) và các công cụ dòng lệnh Go khác.
Sau khi cài đặt thành công, bạn có thể khởi tạo ứng dụng Cobra trong dự án của mình với trong đó yêu cầu.
cobra-cli init
Sau khi khởi tạo ứng dụng Cobra, bạn có thể sử dụng cộng mệnh lệnh phụ với rắn hổ mang lệnh để tạo và thêm lệnh mới vào ứng dụng Cobra của bạn.
cobra-cli add newCommand
Lệnh tạo một tệp mới với mã bạn cần cho lệnh. Bạn có thể chỉnh sửa tệp dựa trên thao tác của mình.
Đây là một hàm xử lý lệnh đơn giản cho một lệnh được tạo bằng lệnh Cobra-cli.
import (
"fmt"
"github.com/spf13/cobra"
"log"
"strconv"
)
var newCmd = &cobra.Command {
Use: "newCmd",
Short: "The newCmd description you specify",
Long: `A longer description that spans multiple lines and likely contains examples
and usage of using your command. 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.`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) < 1 {
log.Fatal("No additional Arguments")
}
arguments := args[0]
fmt.Println(arguments)
}
}
func init() {
rootCmd.AddCommand(newCmd)
}
Bạn có thể truy cập các đối số bổ sung với args đối số của hàm. Chức năng trên sử dụng nếu để kiểm tra xem có đối số bổ sung từ thiết bị đầu cuối hay không và in đối số.
Gói CLI
Gói Cli là một gói tối giản theo chủ đề rõ ràng để xây dựng các ứng dụng CLI nhanh chóng, có thể phân phối trong Go.
Gói Cli hỗ trợ các đối số dòng lệnh, cờ và lệnh con với các danh mục. Nó có chức năng phục vụ cho các tùy chọn ngắn, hoàn thành Bash, trợ giúp được tạo và lập phiên bản.
Gói Cli có thể tương thích với Go tích hợp sẵn lá cờ và định nghĩa bài văn và bạn có thể sử dụng hầu hết các tính năng trong lá cờ gói với Cli.
Chạy các lệnh này trong phần cuối của thư mục làm việc của bạn để thêm gói Graphql-go và các phần phụ thuộc của nó vào dự án của bạn.
go get github.com/urfave/cli
Đây là cách bạn có thể thêm lệnh vào ứng dụng CLI của mình với gói Cli.
package mainimport (
"fmt"
"log"
"os"
"github.com/urfave/cli/v2"
)
func main() {
app := &cli.App {
Name: "new",
Usage: "make a new command with the Cli package",
Action: func(*cli.Context) error {
fmt.Println("Here's a new command")
return nil
},
}
if err := app.Run(os.Args); err != nil {
log.Fatal(err)
}
}
bên trong chính chức năng, ứng dụng biến là một phiên bản của ứng dụng Cli và ứng dụng của Hoạt động trường là chức năng xử lý của ứng dụng. Đây, Mới lệnh sẽ in văn bản từ hàm hoặc trả về lỗi nếu có bất kỳ lỗi nào từ ứng dụng.
Gói Cli rất hữu ích cho các dự án nhỏ hơn mà không có nhiều tính năng hoặc phức tạp.
Gói Go-Arg
Gói Go-arg là một gói dựa trên cấu trúc để phân tích cú pháp các đối số CLI trong Go. Với gói Go-arg, bạn có thể khai báo cấu trúc cho các đối số CLI và hoạt động trên các đối số như cấu trúc dữ liệu Go thông thường. Gói Go-arg cung cấp các đối số bắt buộc, đối số vị trí, biến môi trường, chuỗi sử dụng, giá trị mặc định và nhiều tính năng khác.
Gói hỗ trợ các kiểu cơ bản như số nguyên, dấu phẩy động, chuỗi và boolean. Nó cũng hỗ trợ các loại phức tạp hơn như URL, khoảng thời gian, địa chỉ email, địa chỉ MAC, con trỏ, lát cắt, bản đồ và không tí nào loại hình.
Bạn có thể dùng lấy lệnh để thêm gói Go-arg vào các gói phụ thuộc của bạn.
go get github.com/alexflint/go-arg
Gói Go-arg rất đơn giản và trực quan để sử dụng. Đây là cách bạn có thể chấp nhận các đối số từ dòng lệnh và in chúng ra bảng điều khiển dòng lệnh.
func main() {
var args struct {
Foo string
Bar bool
}
arg.MustParse(&args)
fmt.Println(args.Foo, args.Bar)
}
Các args struct là trường hợp cấu trúc cho ứng dụng CLI. Các MustParse phương thức phân tích cú pháp các đối số từ dòng lệnh vào thể hiện struct.
Bạn có thể dễ dàng chạy chương trình với chạy lệnh và chỉ định các đối số sau tên tệp.
go run main.go --foo=hello --bar
Bạn cũng có thể sử dụng xây dựng lệnh xây dựng ứng dụng của bạn thành một tệp thực thi trước khi chạy tệp thực thi và chỉ định các đối số.
go build main.go
./main --foo=hello --bar
Có sự khác biệt đáng kể giữa GUI và CLI mà bạn cần xem xét
Trong quá trình phát triển, nếu bạn phải lựa chọn giữa việc xây dựng CLI hoặc GUI cho người dùng của mình, bạn sẽ cần cân nhắc nhiều yếu tố để đưa ra lựa chọn.
Sử dụng CLI trên GUI dẫn đến các chương trình nhanh hơn, tự động hóa dễ dàng và sử dụng tài nguyên thấp hơn. Nếu bất kỳ ưu điểm nào trong số đó không quan trọng đối với ứng dụng của bạn, bạn có thể tốt hơn với GUI vì chúng phổ biến hơn với người dùng phổ thông.