字面值无法取地址

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没办法进行转换。

你可能感兴趣的:(Go)