看来您正在此处尝试(几乎)直接使用C代码。Go有一些区别。
- 首先,您无法将数组和切片初始化为
const
。该术语const
在Go中的含义与在C中的含义不同。列表应var
改为。
- 其次,作为一种样式规则,Go倾向于
basenameOpts
而不是basename_opts
。
char
Go中没有类型。您可能想要byte
(或者rune
如果您打算允许unicode代码点)。
- 在这种情况下,列表的声明必须具有赋值运算符。例如:
var x = foo
。
- Go的解析器要求列表声明中的每个元素都以逗号结尾。这包括最后一个元素。这样做的原因是因为Go会在需要的地方自动插入分号。这需要更严格的语法才能起作用。
例如:
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",
},
}
另一种方法是声明列表的类型,然后使用init
函数将其填满。如果您打算使用数据结构中的函数返回的值,这将非常有用。init
函数在初始化程序时运行,并保证在main
执行之前完成。init
一个包甚至同一源文件中都可以具有多个功能。
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",
},
}
}
由于您不熟悉Go语言,因此我强烈建议您仔细阅读语言规范。它很短,写得很清楚。它将为您清除许多这些小特质。