Dường như bạn đang cố gắng sử dụng (gần như) thẳng mã C tại đây. Go có một vài khác biệt.
- Trước hết, bạn không thể khởi tạo mảng và lát thành
const
. Thuật ngữ const
có ý nghĩa khác trong Go, giống như trong C. Danh sách nên được định nghĩa là var
thay thế.
- Thứ hai, dưới dạng quy tắc kiểu, Go thích
basenameOpts
như trái ngược với basename_opts
.
- Không có
char
nhập bằng Go. Bạn có thể muốn byte
(hoặc rune
nếu bạn có ý định cho phép các điểm mã unicode).
- Việc khai báo danh sách phải có toán tử gán trong trường hợp này. Ví dụ:
var x = foo
.
- Trình phân tích cú pháp của Go yêu cầu mỗi phần tử trong khai báo danh sách kết thúc bằng dấu phẩy. Điều này bao gồm phần tử cuối cùng. Lý do là vì Go tự động chèn dấu chấm phẩy khi cần. Và điều này đòi hỏi cú pháp hơi chặt chẽ hơn để làm việc.
Ví dụ:
type opt struct {
shortnm byte
longnm, help string
needArg bool
}
var basenameOpts = []opt {
opt {
shortnm: 'a',
longnm: "multiple",
needArg: false,
help: "Usage for a",
},
opt {
shortnm: 'b',
longnm: "b-option",
needArg: false,
help: "Usage for b",
},
}
Một cách khác là để khai báo danh sách với loại của nó và sau đó sử dụng một chức năng init
để lấp đầy nó lên. Điều này chủ yếu hữu ích nếu bạn dự định sử dụng các giá trị được trả về bởi các hàm trong cấu trúc dữ liệu. init
chức năng được chạy khi chương trình đang được khởi tạo và được đảm bảo hoàn thành trước khi main
được thực hiện. Bạn có thể có nhiều chức năng init
trong một gói hoặc thậm chí trong cùng một tệp nguồn.
type opt struct {
shortnm byte
longnm, help string
needArg bool
}
var basenameOpts []opt
func init() {
basenameOpts = []opt{
opt {
shortnm: 'a',
longnm: "multiple",
needArg: false,
help: "Usage for a",
},
opt {
shortnm: 'b',
longnm: "b-option",
needArg: false,
help: "Usage for b",
},
)
}
Vì bạn mới sử dụng, tôi khuyên bạn nên đọc qua the language specification. Nó khá ngắn và được viết rất rõ ràng. Nó sẽ xóa rất nhiều những idiosyncrasies nhỏ cho bạn.