在下面的方法中,我试图通过将字节附加到字符串数组来重新定义 IPAddr 类型的字符串方法
type IPAddr [4]byte
func (ip IPAddr) String() string {
var s []string
for _, i := range ip {
s = append(s, i)
}
return fmt.Sprintf(strings.Join(s, "."))
}
cannot use i (type byte) as type string in append
playground
由于您的类型是一个长度较小的数组,所以我建议只构建字符串而不遍历元素:
func (ip IPAddr) String() string {
return fmt.Sprintf("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3])
}
https://play.golang.org/p/nOSj-EyXuyf
如果您想通过加入字符串 slice 来实现您的解决方案,您需要使用 strconv
包将字节转换为它们的十进制表示:
func (ip IPAddr) String() string {
s := make([]string, 0, len(ip))
for _, i := range ip {
s = append(s, strconv.Itoa(int(i)))
}
return strings.Join(s, ".")
}