广告
返回顶部
首页 > 资讯 > 后端开发 > GO >golang 接口嵌套实现复用的操作
  • 478
分享到

golang 接口嵌套实现复用的操作

2024-04-02 19:04:59 478人浏览 薄情痞子
摘要

大家还是直接看代码吧~ package main import ( "fmt" ) func main() { start(NewB(C{})) star

大家还是直接看代码吧~


package main
import (
    "fmt"
)
func main() {
    start(NewB(C{}))
    start(NewB(D{}))
}
type A interface {
    what()
}
type B struct {
    A
}
type C struct {
}
func (b C) what() {
    fmt.Println("this is type C")
}
type D struct {
}
func (b D) what() {
    fmt.Println("this is type D")
}
func start(b B) {
    b.what()
}
func NewB(a A) B {
    return B{a}
}

补充:【玩转Golang】通过组合嵌入实现代码复用

应用开发中的一个常见情景,为了避免简单重复,需要在基类中实现共用代码,着同样有助于后期维护。

如果在以往的支持类继承的语言中,比如c++,Java,C#等,这很简单!可是Go不支持继承,只能mixin嵌入

且看下面的代码:


type ManKind interface{
    Say(s string);   
    GetMouth()string
}
type Man struct{
   
}
func NewMan() ManKind{
    return &Man{};
}
func (this *Man)GetMouth()string{
    return "M0"
}
func (this *Man) Say(s string){
    fmt.Printf("\n Speak with mouth[%s] : \"%s\"",this.GetMouth(),s);
}
type StrongMan struct{
    Man
}
func NewStrongMan()ManKind{
    return &StrongMan{}
}
func (this*StrongMan)GetMouth()string{
    return "M1"
}
func main(){    
    NewMan().Say("good luck!")
    NewStrongMan().Say("good luck!")
}

如果支持继承,很明显应该输出

Speak with mouth[M0] : "good luck!"

Speak with mouth[M1] : "good luck!"

但是在golang中只能输出:

Speak with mouth[M0] : "good luck!"

Speak with mouth[M0] : "good luck!"

StrongMan中调用Say(),此时可以将指针传递到内嵌类,只是简单的指向了Man的方法,在ManKind中调用GetMouth就是ManKind自己的GetMouth,和StrongMan没有关系。

当然,我们可以在StrongMan中覆盖Say方法


func (this *StrongMan)Say(s string){
    fmt.Printf("\n Speak with mouth[%s] : \"%s\"",this.GetMouth(),s);
}

此时,当然可以正确输出,因为本来调用的就都是StrongMan自己的方法了,这又和我们的初衷相违背了。那么这种情况怎么实现呢?我的方法是,让Man再脏一点儿,把需要的东西传递给组合进来的类。

给Man增加一个属性mouth,增加一个SetMouth方法,修改一下GetMouth方法,StrongMan的GetMouth方法删除掉,再修改一下NewStrongMan方法

最后的代码如下:


package main
import(
    "fmt"
)
type ManKind interface{
    Say(s string);    
    SetMouth(m string)
    GetMouth()string
}
type Man struct{
    ManKind    
    mouth string
}
func NewMan() ManKind{
    return &Man{mouth:"M0"};
}
func (this *Man)GetMouth()string{
    return this.mouth;
}
func (this *Man)SetMouth(s string){
    this.mouth=s;
}
func (this *Man) Say(s string){
    fmt.Printf("\n Speak with mouth[%s] : \"%s\"",this.GetMouth(),s);
}
type StrongMan struct{
    Man
}
func NewStrongMan()ManKind{
    sm := &StrongMan{}
  sm.SetMouth("M1");
  return sm;
}
    
func main(){    
    NewMan().Say("good luck!")
    &NewStrongMan().Say("good luck!")
}

当然,如果你不愿意用Get、Set方法,也可以直接输出Man的Mouth属性。

总结的嵌入式编程要点:

1,被嵌入的类的方法,只能访问他自己的字段,包装类即时声明了同名字段也没用。

2,包装类可以覆盖嵌入类的方法,但是嵌入类访问不到,亦然访问自己的方法。只能在包装类中连同调用方法一同实现。

3,包装类覆盖嵌入类字段后,亦然可以通过嵌入类的类名访问嵌入类的字段。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

您可能感兴趣的文档:

--结束END--

本文标题: golang 接口嵌套实现复用的操作

本文链接: https://www.lsjlt.com/news/124897.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • golang 接口嵌套实现复用的操作
    大家还是直接看代码吧~ package main import ( "fmt" ) func main() { start(NewB(C{})) star...
    99+
    2022-11-12
  • 怎么在golang中通过接口嵌套实现复用
    本篇文章为大家展示了怎么在golang中通过接口嵌套实现复用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。golang适合做什么golang可以做服务器端开发,但golang很适合做日志处理、数据打...
    99+
    2023-06-14
  • golang中结构体嵌套接口的实现
    在golang中结构体A嵌套另一个结构体B见的很多,可以扩展A的能力。 A不仅拥有了B的属性,还拥有了B的方法,这里面还有一个字段提升的概念。 示例: package main i...
    99+
    2023-05-14
    golang 结构体嵌套接口 golang 嵌套接口
  • golang中结构体嵌套接口如何实现
    今天小编给大家分享一下golang中结构体嵌套接口如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在golang中结构...
    99+
    2023-07-05
  • Golang 端口复用测试的实现
    先给出结论: 同一个进程,使用一个端口,然后连接关闭,大约需要30s后才可再次使用这个端口。 测试 首先使用端口9001连接服务端,发送数据,然后关闭连接,接着再次使用端口9001...
    99+
    2022-11-11
  • Golang端口复用测试的实现方法
    小编给大家分享一下Golang端口复用测试的实现方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!先给出结论:同一个进程,使用一个端口,然后连接关闭,大约需要30...
    99+
    2023-06-14
  • golang调用c实现的dll接口细节分享
    目的 本篇文章主要介绍golang在调用c实现的dll时,具体的一些方式。比如值传递、参数传递、指针等等的一些使用。 一、dll的代码 c实现的dll代码: hello.h #i...
    99+
    2022-11-12
  • 如何使用Golang Facade实现简洁的接口调用
    使用Golang的Facade模式可以实现简洁的接口调用。Facade模式是一种结构设计模式,它提供了一种简化接口的方式,使得客户端...
    99+
    2023-10-10
    Golang
  • 使用Spring Boot实现操作数据库的接口的步骤
    本篇内容主要讲解“使用Spring Boot实现操作数据库的接口的步骤”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“使用Spring Boot实现操作数据库的接口的步骤”吧!一、Spring B...
    99+
    2023-06-20
  • 使用Spring Boot实现操作数据库的接口的过程
    一、Spring Boot原理 用户从页面前端,也就是我们所说的 view 层进行查询访问,进入到 controller 层找到对应的接口,接 着 controller 进行对 s...
    99+
    2022-11-12
  • Spring框架中如何实现接口的数组操作?
    Spring框架是一个非常流行的开源Java应用程序框架,它提供了很多现成的解决方案,以帮助开发人员更快地构建高质量的应用程序。在Spring框架中,接口的数组操作是一个非常常见的需求。本文将介绍如何在Spring框架中实现接口的数组操作。...
    99+
    2023-08-09
    接口 spring 数组
  • VB.NET实现接口的相关操作方法是怎样的
    VB.NET实现接口的相关操作方法是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。开发人员在应用VB.NET进行实际开发的时候,发现其中有不少跟其他语言不一样的地方,...
    99+
    2023-06-17
  • 如何实现Spring Boot接口参数的加密解密操作
    这篇文章主要介绍如何实现Spring Boot接口参数的加密解密操作,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!加密解密本身并不是难事,问题是在何时去处理?定义一个过滤器,将请求和响应分别拦截下来进行处理也是一个办...
    99+
    2023-06-14
  • Laravel 接口开发中,如何使用 Go 实现高并发操作?
    在 Laravel 接口开发中,我们经常需要处理高并发请求。为了满足这种需求,我们可以使用 Go 实现并发操作。本文将介绍如何在 Laravel 中使用 Go 实现高并发操作,并演示一些代码示例。 一、安装 Go 首先,我们需要在本地安装...
    99+
    2023-08-17
    laravel linux 接口
  • Golang 使用Map实现去重与set的功能操作
    假设现在有一个需求 将以下 url 保存起来,要求不重复 www.baidu.com www.sina.com.cn www.hao123.com www.baidu.com w...
    99+
    2022-11-12
  • 如何在Java中使用接口和数组实现高效的并发操作?
    在Java中,实现并发操作一直是一个重要的话题。而要实现高效的并发操作,接口和数组是两个非常重要的概念。本文将介绍如何在Java中使用接口和数组实现高效的并发操作,并且给出演示代码。 首先,让我们来了解一下接口的概念。在Java中,接口是...
    99+
    2023-10-18
    接口 并发 数组
  • 在Windows环境下,如何使用PHP接口来处理复杂的数组操作?
    在Windows环境下,使用PHP接口处理复杂的数组操作是一个常见的需求。在本文中,我们将介绍如何使用PHP接口来处理复杂的数组操作。我们将从以下几个方面进行讲解: 什么是PHP接口? 如何使用PHP接口来处理数组操作? 复杂的数组操作示...
    99+
    2023-11-09
    windows 接口 数组
  • Go编程算法中的接口详解:如何优雅地实现代码复用?
    Go语言作为一门高效的编程语言,其拥有着非常灵活的接口设计。这些接口不仅可以帮助我们优雅地实现代码复用,还可以让我们更好地组织代码结构,提高代码的可读性和可维护性。本文将深入探讨Go编程算法中的接口,以及如何优雅地实现代码复用。 接口是什...
    99+
    2023-10-23
    接口 教程 编程算法
  • 怎么使用Nodejs连接Mysql实现基本的增删改查操作
    这篇文章将为大家详细讲解有关怎么使用Nodejs连接Mysql实现基本的增删改查操作,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。接下来示例代码的主要技术点包括基础框架KoaKoa-routerkoa-n...
    99+
    2023-06-15
  • Java使用jdbc连接实现对MySQL增删改查操作的全过程
    目录1.新建项目2.添加jar包3.jdbc的连接4.简单的MySQL增删改查操作总结1.新建项目 新建一个项目,fileànewàproject如下图:...
    99+
    2023-03-06
    jdbc连接mysql数据库增删改查代码 jdbc对数据库增删改查 java中jdbc连接数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作