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 的所有方法
这条规则说的是如果我们用来调用特定接口方法的接口变量是一个值类型,那么方法的接受者必须也是值类型该方法才可以被调用。
可以变换接受者的值类型和调用时传入类型测试以下。
本文介绍了一个Go语言中的接口示例,展示了如何定义接口并由具体结构体实现这些接口。通过一个具体的例子,解释了在使用接口变量时,如何根据两个规则调用不同类型的方法。

被折叠的 条评论
为什么被折叠?



