请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

接口 只定义、不实现、会报错的 (动态创建接口的调用对象)

因为项目的某些原因、  接口里的方法、定义完后、 “PC端的需要实现这个方法、 而移动端的不需要实现这个方法、”

所以、 我想定义完后、 并不实现方法、 但是会报错。

https://img1.sycdn.imooc.com//szimg/5b8caef20001680415341028.jpg


传1 创建移动端 的struct 、  传2创建pc端的实现 struct 


https://img1.sycdn.imooc.com//szimg/5b8caf2c0001d32b10280370.jpg


比如这些方法某一个不实现、就会出错的 ~  ~、  我知道我这种写法不对、  请问老师  我这应该怎么做呢?


https://img1.sycdn.imooc.com//szimg/5b8cafc30001a10114400436.jpg

正在回答 回答被采纳积分+3

1回答

ccmouse 2018-09-03 19:54:59

接口的确需要把所有定义的方法都实现了。同学的例子中如果有不需要的方法也要给个空的实现。
不过呢,这种情况的出现就说明你的接口定义的过大了。可以根据具体业务来适当打散,拆出几个接口来

0 回复 有任何疑惑可以回复我~
  • 提问者 lairifangchang #1
    因为后续还要增加不同的机构,所以呢 采用了枚举来做判断移动端 或者 pc端。  如果我要拆开接口的话 那后面增加一个机构 我就要增加两个接口。 所以 这块老师 还有更好一点的解决方案嘛? 想了两天了 下周pc端就要和第三方连调了 ??
    回复 有任何疑惑可以回复我~ 2018-09-03 20:04:42
  • 提问者 lairifangchang #2
    嗨  老师   ~ ~、
    回复 有任何疑惑可以回复我~ 2018-09-05 10:11:01
  • ccmouse 回复 提问者 lairifangchang #3
    如果是短期需要解决,那么我们的方法就是不想实现的话,提供一个空方法。很容易就能解决这个问题。
    
    从长期来说,还是需要去拆开接口,我们需要更深入的思考,为什么有些方法大家都需要实现,有些方法只有pc端需要?你能不能回答这个问题,如果能的话,接口就很容易的拆开了。
    
    听你的说法貌似是我们有pc端和移动端,然后每个端会支持很多机构。但并不完全相同。不知是否是这样,那我们假设我的理解的话,一个直白并且改动很小的方法就是每个端都定义一个属于自己的接口。pc端如果要支持,那就实现它。移动端如果要支持,那也实现它。注意所有的实现是可以写在一个大的Struct里面的,也不用显示申明你具体实现哪一个接口,这是go语言的优势。也就是说你拆接口时,实现代码基本可以不动。
    
    然后我触发业务逻辑的地方大致这样:
    if processor, ok := financialEnd.(机构接口), !ok {
       报错,说不支持改功能
    } else {
       processor.<具体的方法>
    }
    回复 有任何疑惑可以回复我~ 2018-09-08 11:21:34
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信