Skip to content

flag

Gói Flag tích hợp sẵn trong Go thực hiện phân tích cú pháp tham số dòng lệnh, giúp phát triển công cụ dòng lệnh dễ dàng hơn.

Nhập

go
import flag

Kiểu dữ liệu

Các kiểu được hỗ trợ bao gồm:

  • bool
  • int
  • int64
  • uint
  • uint64
  • float
  • float64
  • string
  • duration

Định nghĩa

Sử dụng flag.Type() để định nghĩa, giá trị trả về là con trỏ

go
name := flag.String("name", "Trương Tam", "Tên")
age := flag.Int("age", 15, "Tuổi")
sex := flag.Bool("sex", true, "Giới tính")

Cũng có thể sử dụng flag.TypeVar() để định nghĩa

go
var name string
var age int
var sex bool
flag.StringVar(&name, "name", "Trương Tam", "Tên")
flag.IntVar(&age, "age", 15, "Tuổi")
flag.BoolVar(&sex, "sex", true, "Giới tính")

Phân tích cú pháp

Gọi flag.Parse() để phân tích tham số, các định dạng tham số dòng lệnh được hỗ trợ như sau:

  • -flag xxx
  • --flag xxx
  • -flag=xxx
  • --flag=xxx

Tham số kiểu boolean phải sử dụng dấu bằng, việc phân tích Flag sẽ dừng lại trước tham số không phải dòng lệnh đầu tiên.

Các hàm khác

go
func Args() []string //Trả về tất cả tham số không phải lệnh

func NArg() int //Trả về số lượng tham số không phải dòng lệnh

func NFlag() int //Trả về số lượng tham số dòng lệnh

Ví dụ

go
var name string
var age int
var sex bool
flag.StringVar(&name, "name", "Trương Tam", "Tên")
flag.IntVar(&age, "age", 15, "Tuổi")
flag.BoolVar(&sex, "sex", true, "Giới tính")

flag.Parse()
fmt.Println(name, age, sex)

Biên dịch và khởi chạy chương trình trong dòng lệnh

powershell
PS D:\WorkSpace\Code\GoProject\bin> .\go_build_GoProject_src_main.exe
Trương Tam 15 true
PS D:\WorkSpace\Code\GoProject\bin> .\go_build_GoProject_src_main.exe -h
Usage of D:\WorkSpace\Code\GoProject\bin\go_build_GoProject_src_main.exe:
  -age int
        Tuổi (default 15)
  -name string
        Tên (default "Trương Tam")
  -sex
        Giới tính (default true)
PS D:\WorkSpace\Code\GoProject\bin> .\go_build_GoProject_src_main.exe -age 15 -name "Lý Tứ" -sex=false
Lý Tứ 15 false
PS D:\WorkSpace\Code\GoProject\bin>

Golang by www.golangdev.cn edit