son*_*ags 1 go
我尝试将方法添加到net.IP. 因此我创建了一个自定义类型IPAddr:
package main
import (
    "encoding/json"
    "net"
    "log"
)
func readNetworks(data []byte) (*[]Network, error) {
    var networks []Network
    if err := json.Unmarshal(data, &networks); err != nil {
        return &networks, err
    }
    return &networks, nil
}
type IPAddr net.IP
type Network struct {
    CIDR          string        `json:"cidr"`
    Gateway       IPAddr        `json:"gateway"`
}
func (ip *IPAddr) copy() IPAddr {
    if x := ip.To4(); x != nil {
        ip = x
    }
    dup := make(IPAddr, len(ip))
    copy(dup, ip)
    return dup
}
func main() {
    _, err := readNetworks([]byte("[{\"cidr\":\"10.100.19.0/24\",\"gateway\":\"10.100.19.1\"}]"))
    if err != nil {
        log.Fatal(err)
    }
}
有些事情在这里不起作用:
- 来自net.IP的方法To4()对于IPAddr是未知的(第27行)
 - len()不适用于IPAddr但适用于net.IP(第30行)
 - 字符串不能解组到IPAddr,这适用于net.IP(第12行)
 
我的类型定义显然是错误的...任何提示?