go 成长路上的坑(2)

请看代码

代码一

package main

import "fmt"

func main() {

	var a Integer = 1
	var b Integer = 2

	var i interface{} = &a

	sum := i.(*Integer).Add(b)

	fmt.Println(sum)
}

type Integer int

func (a Integer) Add(b Integer) Integer {

	return a + b
}

/*
// 这样也可以
type Integer int

func (a *Integer) Add(b Integer) Integer {

	return *a + b
}

 */

代码二

package main

import "fmt"

func main() {

	var a Integer = 1
	var b Integer = 2

	var i interface{} = a

	sum := i.(Integer).Add(b)

	fmt.Println(sum)
}

type Integer int

func (a Integer) Add(b Integer) Integer {

	return a + b
}


/*
// 不行
//src/test1/main14/main.go:12:20: cannot call pointer method on i.(Integer)
//src/test1/main14/main.go:12:20: cannot take the address of i.(Integer)
type Integer int

func (a *Integer) Add(b Integer) Integer {

	return *a + b
}*/

why?

func (receiver receiver_type) methodName(parameter_list) (return_value_list) { ... }
receiver 必须是合法的指针(包括nil) 或者 能够获取实例的地址


i.(Integer)  可以理解为 非指针 且 无法获取实例
posted @ 2019-10-23 12:39  xiaobaiskill  阅读(163)  评论(0编辑  收藏  举报