type IntSet struct {
List []int
}
func (i *IntSet) String() string {
return fmt.Sprintf("%v", i.List)
}
func main() {
i := &IntSet{List: []int{1, 2}}
fmt.Println(i.String())
fmt.Println(IntSet{List:[]int{2,3}}.String()) //出错,字面值无法获取地址
fmt.Println((&IntSet{List:[]int{2,3}}).String()) //取址后再调用string,通过
}
为指针接收器*IntSet实现了String方法,当*IntSet或者IntSet类型变量调用String方法时,都可以通过(Go在内部对*IntSet和IntSet进行转换)。但当使用字面值调用String方法时,会出错。这是因为无法对字面值进行取址,Go没办法进行转换。