分享
  1. 首页
  2. 文章

作为一个学习者, 对 接口 的认知. 以及一些有趣的想法

jingle · · 3089 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

接口 是 一组相关动作名/行为名的 组名

由于 接口 只能控制 方法名 和 参数的个数与类型, 接口 无法控制代码能做什么

实现接口的类型对象 A, 挂羊头卖羊肉

实现接口的类型对象 B, 挂羊头卖猪肉

实现接口的类型对象 C, 挂羊头卖人造植物肉

实现接口的类型对象 D, 挂羊头卖春

所以 接口 的用途很小, 只能作为 函数定义中的形参.

1 冗余用法, 毫无意义-声明接口只为调用动态值的接口方法:

var 接口对象 接口类型; var 类型对象 类型

接口对象 = 类型对象;

接口对象.类型对象的接口方法()

2 作为函数定义中的形参, 接收实现该接口的对象, 再利用

func do( 接口对象 接口类型 ){

接口对象.动态值实现的接口方法()

}

目前几乎所有教学都教接口的第一种用法, 谁能告诉我第一种方式的用途?

接口倒让我有些其他想法: 如果有一种类型能代表 一组已经实现的方法, 那么也应该有点用处.

伪代码如下:

type Actions actions{

fn Action1( a... fn() ) { Print( "a" ); if... a[0]() }

fn Action2( b... fn() ) { Print( "b" ); if... b[0]() }

}

class X{

@Actions{ // 表示 可将花括号中内容用于 actions: "Actions"

do1(){ Print( "is finished" ) }

do2(){ Print( "已完成" ) }

}

}

var x = new( X )

x.Action1( do1 ) // output: a is finished

x.Action2( do1 ) // output: b is finished

x.do2() // output: 已完成

另外, 讲点经历. 我尝试读了一下http包 又链接到text包, 发现很难, 函数, 方法, 私有, 公用, 不同文件, 无法直觉式的认出它是谁, 等认识它是谁时, 前面的逻辑又乱了甚至想不起来. 比如标识符 parse . 太脑力冗余了. 路由器那块 handler接口 神一般的存在, 我得话时间看看, 不过先得把模板这块内容递归回来


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
3089 次点击
3 回复 | 直到 2023年02月09日 10:31:35
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏