This question already has an answer here:
In the following method, I attempted to redefine the string method on the IPAddr type by appending bytes to an array of string
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
</div>
Since your type is an array with a small length, so I would recommend just building the string without ranging over the elements:
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
If you want to implement your solution by joining the string slice, you need to convert the bytes to their decimal representation using the strconv
package:
func (ip IPAddr) String() string {
s := make([]string, 0, len(ip))
for _, i := range ip {
s = append(s, strconv.Itoa(int(i)))
}
return fmt.Sprintf(strings.Join(s, "."))
}