Cobra là gì?

Cobra là gì?

bet88 soi keo nha cai

Công cụ thần kỳ Cobra & Cobra CLI cho Golang phát triển ứng dụng dòng lệnh siêu tốc

Ngày cập nhật: 2024-11-19
Lượt đọc: 851
Số từ: 1119
Chuyên mục: Golang

Gần đây mình muốn dùng Golang xây dựng công cụ dòng lệnh tự động sinh mã CRUD từ model dự án gin, mang lại trải nghiệm tương tự như tạo admin dashboard nhanh trong Python Django. Mình có tham khảo dự án nunu nhưng không thích kiểu tổ chức code của nó, và cũng thiếu template frontend Ant Design. Thế là quyết định tự xây dựng lại từ đầu.

Trong lúc tham dự Hội nghị Kinh tế Số Bát Giác Loan Yên Đài,一边写代码一边整理这篇 tài liệu. Ông Nghi Quang Nam diễn thuyết về AI trên sân khấu, còn mình chăm chỉ viết CRUD dưới hàng ghế cuối… Chúng ta đều có tương lai tươi sáng 🥲

Nếu thường xuyên dùng Golang phát triển công cụ dòng lệnh cá nhân, Cobra & Cobra CLI chính là lựa chọn vàng giúp khởi tạo dự án hiệu quả và tổ chức mã rõ ràng.

Cobra cung cấp công cụ đặc biệt giúp tạo ứng dụng và thêm các lệnh mong muốn. Đây là cách dễ nhất để tích hợp Cobra vào ứng dụng của bạn.

!](ảnh minh họa)

  • Dự án
  • Tài liệu chính thức: [Cobra CLI Documentation

Tên gọi “Cobra” bắt nguồn từ loài rắn hổ mang tiếng Anh.😱

Cài đặt cobra-cli

Thực hiện lệnh sau để cài đặt:

1
2
3
4
5
6
7
go install github.com/spf13/cobra-cli@latest  
go: downloading github.com/spf13/cobra-cli v1.3.0  
go: downloading github.com/spf13/cobra v1.3.0  
go: downloading golang.org/x/sys v0.0.0-20211210111614-af8b64212486  

which cobra-cli  
/home/zhongwei/golang/bin/cobra-cli  

Khởi tạo dự án với cobra-cli (Cách 1)

Tạo mới hoàn toàn dự án:

1
cobra-cli init [tên_app]  

Khởi tạo dự án với cobra-cli (Cách 2)

Nếu đã có dự án rồi:

1
2
3
4
5
6
mkdir myapp  
cd myapp  
go mod init github.com/spf13/myapp  

# Tạo khuôn khổ dự án tự động  
cobra-cli init  

⚠️ Lưu ý: Nếu đã tồn tại file main.go, cobra-cli sẽ ghi đè nó.

Cấu trúc thư mục tiêu chuẩn

1
2
3
4
5
6
7
8
tree  
.  
├── LICENSE  
├── cmd  
│   └── root.go  
├── go.mod  
├── go.sum  
└── main.go  

Mặc định mọi lệnh đều kế thừa từ rootCmd nếu không chỉ định khác.

File main.go

Đây là nội dung tự động sinh bởi cobra-cli:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
/*  
Copyright © 2024 TÊN BẠN <EMAIL>  
*/
package main  

import "go_snip/cmd"  

func main() {  
    cmd.Execute()  
}  

Tạo lệnh mới

Ví dụ: Tạo lệnh phân tích file model trong dự án gin, tự động sinh:

  • Mã nguồn CRUD controller
  • Route API
  • Giao diện Ant Design Pro (trang danh sách, tạo/sửa dữ liệu)
  • Câu lệnh SQL tạo bảng

Thực hiện lệnh:

1
2
cobra-cli add ginCrud  
ginCrud created at /mnt/d/work/go_snip  

⚠️ Quan trọng: Tên lệnh phải viết theo kiểu camelCase (không dùng snake_case/kebab-case). Ví dụ:

  • cobra-cli add add-user
  • cobra-cli add addUser

Sau khi thực hiện, thư mục cmd/ sẽ có thêm file ginCrud.go.

Cấu trúc mã lệnh mới

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package cmd  

import (  
  "fmt"  
  "github.com/spf13/cobra"  
)  

// GinCrudCmd biểu diễn lệnh ginCrud  
var ginCrudCmd = &cobra.Command{  
  Use:  "ginCrud",  
  Short: "Tạo mã gin & antd pro CRUD từ model",  
  Long: `Phân tích cấu trúc struct trong file model và sinh tự động:  
- API CRUD cho gin  
- Cấu hình route  
- Giao diện antd pro + mã API  
- Câu lệnh SQL tạo bảng  
`,  
  Run: func(cmd *cobra.Command, args []string) {  
    fmt.Println("Đã gọi ginCrud")  
  },  
}  

func init() {  
  rootCmd.AddCommand(ginCrudCmd)  
}  

Chạy lệnh mới

1
2
go run main.go ginCrud  
Đã gọi ginCrud  

Xem trợ giúp lệnh

Dùng lệnh help kèm tên lệnh:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
go run main.go help ginCrud  
Phân tích cấu trúc struct trong file model và sinh tự động:  
- API CRUD cho gin  
- Cấu hình route  
- Giao diện antd pro + mã API  
- Câu lệnh SQL tạo bảng  

Sử dụng:  
 go_snip ginCrud [flags]  

Tùy chọn:  
 -h, --help  Trợ giúp về ginCrud  

Bạn cũng sẽ thấy lệnh mới được liệt kê trong trợ giúp tổng quát:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
go run main.go  
Ứng dụng Cobra giúp tạo nhanh các file cần thiết để xây dựng ứng dụng dòng lệnh.  

Sử dụng:  
 go_snip [command]  

Các lệnh sẵn có:  
 completion Tạo script tự động hoàn tất cho shell  
 ginCrud    Tạo mã gin & antd pro CRUD từ model  
 help       Trợ giúp về bất kỳ lệnh nào  

Tùy chọn:  
 -h, --help      Trợ giúp cho go_snip  
 -t, --toggle    Thông tin trợ giúp cho toggle  

Dùng "go_snip [command] --help" để xem chi tiết lệnh.  

Thêm tham số cho lệnh

Ví dụ: Khi chạy ginCrud, yêu cầu chỉ định đường dẫn file model.

Tự động hoàn tất lệnh

Cobra hỗ trợ tính năng tiện lợi này qua lệnh:

1
completion Generate the autocompletion script for the specified shell  

Kế hoạch tiếp theo

  • Phân tích AST Golang để trích xuất trường struct
  • Tự động sinh toàn bộ mã CRUD từ phân tích này
comments powered by Disqus
Built with Hugo
Theme Stack thiết kế bởi Jimmy