判断是否实现全部空接口类型的方法

实现全部空接口类型的方法

定义空接口类型&指定实现方法

type Study interface {
	Listen(msg string) string
	Speak(msg string) string
	Read(msg string) string
	Write(msg string) string
}

限制实现所有方法 运行时阶段

第一种是在运行阶段运行的时候,地址做对比,强类型语言,类型做对比.将*study的地址给了Study,而Study是interface{}类型,必须实现所有方法

package main

var _ Study = (*study)(nil)

type Study interface {
	Listen(msg string) string
	Speak(msg string) string
	Read(msg string) string
	Write(msg string) string
}

type study struct {
	Name string
}

func (s *study) Listen(msg string) string {
	return s.Name + " 听 " + msg
}

func (s *study) Speak(msg string) string {
	return s.Name + " 说 " + msg
}

func (s *study) Read(msg string) string {
	return s.Name + " 读 " + msg
}

//func (s *study) Write(msg string) string {
//	return s.Name + " 写 " + msg
//}

func main() {

}

在这里插入图片描述

第二种 编译阶段

任何类型都实现interface类型,所以当bb实现aa的时候要实现,就必须实现所有的属性

如果说次接口没有被实现,那么一方面ide会有红横线出现,另一方面在编译的时候会出现报错。两方面的提示来保证写底层代码的接口是有被实现的。

package main

type aa interface {
	listen(msg string) string
}

var _ aa = new(bb)

type bb struct {
}

//func (b *bb) listen(msg string) string {
//	return ""
//}

如果没实现
在这里插入图片描述

new 和make

new占内存?
new:申请了内存,但是不会将内存初始化,只会将内存置零,返回一个指针。

make:申请了内存,返回已初始化的结构体的零值。
在这里插入图片描述

new 和make 的区别

new 返回的是地址
make 返回的内存空间

package main

import "fmt"

func main() {
	a1 := new([]int)
	a2 := &[]int{}
	a3 := make([]int, 0)

	fmt.Println(a1, a2, a3, a1 == a1)
	fmt.Println(a1 == a2)
}


结果

&[] &[] [] true
false

第三种

第儿种是在运行调用阶段调用此方法的时候没有实现

package main

import "fmt"

//var _ Study = (*study)(nil)

type Study interface {
	Listen(msg string) string
	Speak(msg string) string
	Read(msg string) string
	Write(msg string) string
}

type study struct {
	Name string
	Study
}

//func (s *study) Listen(msg string) string {
//	return s.Name + " 听 " + msg
//}

func (s *study) Speak(msg string) string {
	return s.Name + " 说 " + msg
}

func (s *study) Read(msg string) string {
	return s.Name + " 读 " + msg
}

//func (s *study) Write(msg string) string {
//	return s.Name + " 写 " + msg
//}

func main() {
	studys := new(study)
	studys.Write("rt")
	fmt.Println(*studys)
	studys = studys
}

在这里插入图片描述
一般grpc的方法实现用的是这个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a...Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值