本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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2022-02-18 nfs客户端的一次处理
2022-02-18 kubectl scale 一次缩容调整过程