go自学第二天,留个笔记,万一以后忘了呢
package main
import "fmt"
type I interface{
get() int
set(int)
}
//S实现了I接口
type S struct{
value int
}
//S在这里叫接受者
func (s S) get() int{
return s.value
}
func (s *S) set(x int){
s.value = x
}
//这里我们可以通过接口I来传入实现I接口的各种类型(比如上面的S)
func myTest(i I){
fmt.Printf("value=%d\n", i.get())
i.set(100)
fmt.Printf("value=%d\n", i.get())
}
func main(){
s := &S{}
myTest(s)//这里有两个规则要说一下
}
1.类型 *T 的可调用方法集包含接受者为 *T 或 T 的所有方法集
这条规则说的是如果我们用来调用特定接口方法的接口变量是一个指针类型,那么方法的接受者可以是值类型也可以是指针类型。
2.类型 T 的可调用方法集包含接受者为 T 的所有方法
这条规则说的是如果我们用来调用特定接口方法的接口变量是一个值类型,那么方法的接受者必须也是值类型该方法才可以被调用。
可以变换接受者的值类型和调用时传入类型测试以下。