gpt4 book ai didi

go - 将 net.IP 包装在自定义类型中并在 golang 中添加方法

转载 作者:IT王子 更新时间:2023-10-29 01:49:20 28 4
gpt4 key购买 nike

我尝试将方法添加到 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 行)

我的类型定义显然是错误的...有什么提示吗?

参见示例: http://play.golang.org/p/BT7VFnbPZW

最佳答案

方法不在类型之间继承(Go 根本没有继承)。

您可能想要 embed类型,如果自动提升方法是您所追求的:

type IPAddr struct {
net.IP
}

关于go - 将 net.IP 包装在自定义类型中并在 golang 中添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29751577/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com