我是Go的新手.这个问题让我疯了.你如何在Go中初始化结构数组?
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"}
}
Run Code Online (Sandbox Code Playgroud)
编译器说它期待';' 在[]选择之后.
我应该把大括号'{'放到init我的struct数组中?
谢谢
jim*_*imt 74
看起来你正试图在这里使用(几乎)直接的C代码.Go有一些差异.
const.该术语const在Go中具有不同的含义,与在C中的含义不同.列表应该被定义为var相反.basenameOpts而不是basename_opts.charGo中没有类型.您可能想要byte(或者rune如果您打算允许unicode代码点).var x = foo.例如:
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",
},
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用其类型声明列表,然后使用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",
},
)
}
Run Code Online (Sandbox Code Playgroud)
由于您是Go的新手,我强烈建议您阅读语言规范.它很短,写得很清楚.它会为你清除很多这些小特质.
One*_*One 32
添加这个作为@jimt的优秀答案的补充:
在初始化时定义它的一种常用方法是使用匿名结构:
var opts = []struct {
shortnm byte
longnm, help string
needArg bool
}{
{'a', "multiple", "Usage for a", false},
{
shortnm: 'b',
longnm: "b-option",
needArg: false,
help: "Usage for b",
},
}
Run Code Online (Sandbox Code Playgroud)
这通常也用于测试,以定义几个测试用例并循环遍历它们.
小智 5
你可以这样:
请务必注意每个结构项或项集后面的逗号。
earnings := []LineItemsType{
LineItemsType{
TypeName: "Earnings",
Totals: 0.0,
HasTotal: true,
items: []LineItems{
LineItems{
name: "Basic Pay",
amount: 100.0,
},
LineItems{
name: "Commuter Allowance",
amount: 100.0,
},
},
},
LineItemsType{
TypeName: "Earnings",
Totals: 0.0,
HasTotal: true,
items: []LineItems{
LineItems{
name: "Basic Pay",
amount: 100.0,
},
LineItems{
name: "Commuter Allowance",
amount: 100.0,
},
},
},
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
78341 次 |
| 最近记录: |