go语言基础接收器测试

本go程序主要测试的是接收器的用法
语法如下:

 func(接收器变量 接收器的类型) 方法名(参数列表)(返回参数){

    ..... 
 }
注意 
接收者位于func关键字和方法名之间的括号内

 

/**
本程序将对结构体与函数实现接口的过程进行对比。
1、go type 关键字
2、func (r receiver) f(i interface{}) {
*/
package main
import (
  "fmt"
)

//定义 MyInterface 接口
type MyInterface interface {
  // 定义了ifunc方法,参数为接口,同时接收器隐性的
  ifunc(interface{})
}

//////////////////////////////////////结构体接收器测试//////////////////////////////////////////////////

//定义结构体类型
type MyStruct struct {}
/*********************************************************
* 实现MyInterface的ifunc方法
* @param s *MyStruct 接收器
* @param p interface{} 参数
* 定义无返回值
*/

func (ms *MyStruct) ifunc(i interface{}) {
  fmt.Println("MyInterface ifunc的接收器是MyStruct:", i)
}

/////////////////////////////////////函数接收器测试//////////////////////////////////////////////////

//定义函数类型
type receiver func(interface{})

//实现MyInterface 接口的ifunc方法
func (r receiver) ifunc(p interface{}) {
  // 调用r函数本体
  r(p)
  fmt.Println("MyInterface ifunc的接收器是func:", p)
}

func main() {

  //声明接口变量
  var MyInterfaceVar MyInterface

  //实例化结构体
  s := new(MyStruct)

  //将实例化的结构体赋值到接口
  MyInterfaceVar = s

  //使用接口调用实例化结构体的方法Struct.ifunc
  MyInterfaceVar.ifunc("struct")

  //将匿名函数转换为receiver类型,再赋值给接口
  MyInterfaceVar = receiver(func(v interface{}) {fmt.Println("赋值过程...", v)})

  //使用接口调用receiver.ifunc,内部会调用函数本体
  MyInterfaceVar.ifunc("func")
}

输出结果为:

> Environment:
> GOPATH=C:\Users\qingshuic\go
> Directory: C:\Program Files\Go\my-jin
> Command: "C:\Program Files\Go\bin\go.exe" run -v "C:\Program Files\Go\my-jin\接收器.go"
> Output:
command-line-arguments
MyInterface ifunc的接收器是MyStruct: struct
赋值过程... func
MyInterface ifunc的接收器是func: func
> Elapsed: 1.897s
> Result: Success

posted @ 2023-02-18 21:01  jinzi  阅读(4)  评论(0编辑  收藏  举报