我解析了.yaml文件,需要以自定义方式解组其属性之一。我正在使用"gopkg.in/yaml.v2"
包裹。
有问题的属性按如下方式存储在我的.yaml文件中:
endPointNumberSequences:
AD1: [ 0, 10, 14, 1, 11, 2, 100, 101, 12 ]
因此,它基本上是map[string][]uint16
一种类型。
但是我需要map[string]EpnSeq
在哪里EpnSeq
定义为:
type EpnSeq map[uint16]uint16
我的结构:
type CitConfig struct {
// lots of other properties
// ...
EndPointNumberSequences map[string]EpnSeq `yaml:"endPointNumberSequences"`
}
我试图像这样实现Unmarshaler接口:
// Implements the Unmarshaler interface of the yaml pkg.
func (e EpnSeq) UnmarshalYAML(unmarshal func(interface{}) error) error {
yamlEpnSequence := make([]uint16, 0)
err := unmarshal(&yamlEpnSequence)
if err != nil {
return err
}
for priority, epn := range yamlEpnSequence {
e[epn] = uint16(priority) // crashes with nil pointer
}
return nil
}
我的问题是在UnmarshalYAML
函数内部EpnSeq
未定义类型,从而在运行时导致nil指针异常。
我如何在此处正确实现Unmarshaler接口?
由于@Volker并未发布他的评论作为答案,因此我会为了完整性而这样做。
所以我已经走在正确的道路上,但是在初始化它时却无法取消引用我的结构的指针接收器:
// Implements the Unmarshaler interface of the yaml pkg.
func (e *EpnSeq) UnmarshalYAML(unmarshal func(interface{}) error) error {
yamlEpnSequence := make([]uint16, 0)
err := unmarshal(&yamlEpnSequence)
if err != nil {
return err
}
// make sure to dereference before assignment,
// otherwise only the local variable will be overwritten
// and not the value the pointer actually points to
*e = make(EpnSeq, len(yamlEpnSequence))
for priority, epn := range yamlEpnSequence {
e[epn] = uint16(priority) // no crash anymore
}
return nil
}
Rust 自定义数据类型主要是通过下面这两个关键字来创建: struct: 定义一个结构体 enum: 定义一个枚举类型 而常量的创建可以通过 const 和 static 关键字来创建。
存在多种方法来重新定义现有类型的行为以及提供新的类型。 重写类型编译 一个常见的需求是强制更改类型的“字符串”版本,即在create table语句或其他SQL函数(如cast)中呈现的版本。例如,应用程序可能希望强制呈现 BINARY 适用于除一个平台外的所有平台 BLOB 待渲染。在本例中,使用现有的泛型类型 LargeBinary ,是大多数用例的首选。但是为了更准确地控制类型,每个方言的编
1. 包含头文件 #import <AdHubSDK/AdHubSDK.h> 2. AdHubCustomView 的创建和初始化 在需要导入广告的ViewController头文件中导入头文件并声明实例以及声明代理 #import <AdHubSDK/AdHubSDK.h> @interface AdHubCustomViewController ()<AdHubCustomViewDele
我需要实现我的自定义DefaultComboxModel。这样做的原因是每次我打电话给 或者 或者 我看到它自动触发一个项目状态更改事件。这会导致一些随机项目自动从列表中选择。这不是我想要的,因为它用随机选择的项目填充可编辑的JTextField。 这是我在使用我的自定义Itemlistener中的Thread.dumpStack()进行调试时看到的stacktrace,它是我在调用上述方法时看到
我正在尝试创建一个定制的permalink结构,它将允许我完成以下任务。 我有一个自定义的帖子类型称为"项目" 我有一个自定义分类法,称为项目类别,分配给CPT项目 我希望我的永久链接结构如下所示: 项目/类别/项目-名称 或 /%自定义后类型%/%自定义分类%/%后名称%/ 创建这样的永久链接结构会如何影响URL或其他页面?是否可以取消定义自定义永久链接结构并将其限制为单个CPT? 谢谢
我有一个名为 Expect 的类,在你实例化它之后,你可以构建一个数据结构(为了简单起见,假设它是一棵树)。然后调用 run 方法,该方法遍历树,在每个节点上执行一些操作。这些操作需要一些时间才能完成,以便将来返回最终结果。在伪代码中,它类似于: 我想用它们通常的签名实现map和flatmap,但是它们作为参数接收的函数必须对将来返回的值进行操作。我看不出有任何方法可以实现这一点。