如何用new关键字一行创建带值的InvalidIPError实例并返回?
解决方案
这很简单,你只需要把检测到的无效IP对应的raw值直接嵌入到new的结构体初始化语句中,就能一行完成错误实例创建与返回。修改后的Valid()方法代码如下:
// Valid checks Config data func (c *Config) Valid() Error { // Check mapping.hosts for _, raw := range c.Mapping.Hosts { if validIP := utils.ValidIP4(raw.IPAddress); !validIP { // 一行完成InvalidIPError实例创建并返回 return new(InvalidIPError{HostRaw: raw}) } } return nil } // Error represents errors in config type Error interface { Error() string } // InvalidIPError raises when invalid ip provided type InvalidIPError struct { HostRaw HostRaw } func (e *InvalidIPError) Error() string { return fmt.Sprintf("You specified invalid IP: %v", e.HostRaw) }
说明
new(InvalidIPError{HostRaw: raw})会同时完成两件事:为InvalidIPError结构体分配内存、用给定的raw值初始化结构体的HostRaw字段;- 直接返回这个新建的错误实例,就能让调用方拿到包含具体无效IP信息的错误提示,和你给出的参考写法完全匹配。
内容的提问来源于stack exchange,提问作者user3169724
相关产品推荐
相关产品推荐

