我想写一个协议测试。我目前的想法是定义一系列的步骤。每个步骤包含一个Trigger
和Expectation
-例如,触发器MsgA
和期望MsgB
。
type Series struct {
Steps []Step
}
我不喜欢的是,Series
不是显式的:我必须按顺序创建切片,然后希望它永远不会被弄乱,并依赖它,或者sort
它,然后必须实现排序函数,这是完全不必要的。
什么是一个好的设计来正式定义Series
,并以这种方式使它显式?
我现在最好的想法是创建一个带有int
索引的map:
type Series struct {
Steps map[int]Step
}
series := Series{
Steps: map[int]Step{
0: Step{},
1: Step{},
2: Step{},
...
}
}
另一个选择是自己构建一个链表。go
没有实现(afaik)。为此必须自己构建一个感觉很奇怪。但是这样的解决方案也会稍微放松显式特性:基本上,你总是必须通过链表来获得整个序列(例如,“什么是第4步”)。
1条答案
按热度按时间cbeh67ev1#
除了使用map,你还可以使用slice和一个 keyed 复合文字:
这在Spec:复合文字:
如您所见,
KeyedElement
可能包含一个可选的Key ":"
部分。...键被解释为结构体文字的字段名,数组和切片文字的索引,以及Map文字的键。
注意,你可以混合使用keyed和unkeyed元素,它们不一定是连续的:
上面的输出(在Go Playground上尝试):
这些键也可能是“无序的”,这意味着这也是有效的:
在Go Playground上尝试一下,如果一个slice文本中缺少一个键,索引将是前一个索引+ 1。