|
我是 Go 新手。这个问题让我疯了。你怎么在 Go 中初始化结构数组?/ k9 I _( j0 F1 c$ U2 z1 K/ h
[code]type opt struct shortnm char longnm,help string needArg bool}const basename_opts []opt opt shortnm: 'a longnm: "multiple", needArg: false, help: "Usage for a"} opt shortnm: 'b longnm: "b-option", needArg: false, help: "Usage for b"} code]编译器说它有预期;后[]opt。
7 g$ C! ?$ J: I4 H/ ]4 z2 k3 |4 B1 R我应该把大括号放在哪里{来初始化我的结构数组?& Z$ z; k/ Y$ }6 _4 f2 C
' K. _2 g' E& r 解决方案:
! ^( u5 H4 F* w; F7 X5 t 看来你在这里试着直接用(几乎) C 代码。Go 有一些区别。, _5 O5 t- l- G$ r$ ~; {! E# F
首先,你不能初始化数组和切片const. 该术语const在 Go 有不同的含义,就像 C 中等。列表应定义为var。$ ^% a, ]6 X8 a; |: r# I. c
其次,作为一种风格规则,Go 更喜欢basenameOpts而不是basename_opts.
8 q6 V' w8 G, A& j) }8 F r3 XcharGo 没有类型。你可能想要byte(或者rune假如你打算允许 unicode 代码点)。' J0 d; {0 J! {
在这种情况下,列表的声明必须具有赋值操作符。var x = foo。
5 x8 K2 k& k: {$ n* M8 u$ wGo 分析器要求列表声明中的每个元素都以逗号结束。这包括最后一个元素。这是因为 Go 需要的地方会自动插入分号。工作需要更严格的语法。例如:: ?: E- K# V! U; u' g0 [
[code]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",}code]另一种方法是用它的类型声明列表,然后使用一个init填充函数。如果您计划在数据结构中使用函数返回值,则非常有用。init函数在程序初始化时运行,并保证main执行前完成。你可以。init包中有多个函数,甚至可以在同一源文件中。; Z3 e _6 \' v4 c7 r
[code] 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", code]由于您是 Go 新手,我强烈建议你通读语言规范。它很短,写得很清楚。它将为你消除许多这些小特征。 |
|