iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >怎么在golang中通过接口嵌套实现复用
  • 379
分享到

怎么在golang中通过接口嵌套实现复用

2023-06-14 22:06:00 379人浏览 泡泡鱼
摘要

本篇文章为大家展示了怎么在golang中通过接口嵌套实现复用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Golang适合做什么golang可以做服务器端开发,但golang很适合做日志处理、数据打

本篇文章为大家展示了怎么在golang中通过接口嵌套实现复用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

Golang适合做什么

golang可以做服务器开发,但golang很适合做日志处理、数据打包、虚拟机处理、数据库代理等工作。在网络编程方面,它还广泛应用于WEB应用、api应用等领域。

package mainimport (    "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 mainimport(    "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!")}

上述内容就是怎么在golang中通过接口嵌套实现复用,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网GO频道。

您可能感兴趣的文档:

--结束END--

本文标题: 怎么在golang中通过接口嵌套实现复用

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

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

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

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

下载Word文档
猜你喜欢
  • 怎么在golang中通过接口嵌套实现复用
    本篇文章为大家展示了怎么在golang中通过接口嵌套实现复用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。golang适合做什么golang可以做服务器端开发,但golang很适合做日志处理、数据打...
    99+
    2023-06-14
  • golang 接口嵌套实现复用的操作
    大家还是直接看代码吧~ package main import ( "fmt" ) func main() { start(NewB(C{})) star...
    99+
    2022-11-12
  • webuploader通过在java中使用怎么实现跨域上传
    本篇文章给大家分享的是有关webuploader通过在java中使用怎么实现跨域上传,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。项目中使用webuploader进行文件上传,...
    99+
    2023-05-31
    java webuploader 跨域上传
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作