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

来源:6-3 接口的定义和实现

lairifangchang

2018-09-03

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

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

http://img.mukewang.com/szimg/5b8caef20001680415341028.jpg


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


http://img.mukewang.com/szimg/5b8caf2c0001d32b10280370.jpg


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


http://img.mukewang.com/szimg/5b8cafc30001a10114400436.jpg

写回答

1回答

ccmouse

2018-09-03

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

0
3
ccmouse
回复
lairifangchang
如果是短期需要解决,那么我们的方法就是不想实现的话,提供一个空方法。很容易就能解决这个问题。 从长期来说,还是需要去拆开接口,我们需要更深入的思考,为什么有些方法大家都需要实现,有些方法只有pc端需要?你能不能回答这个问题,如果能的话,接口就很容易的拆开了。 听你的说法貌似是我们有pc端和移动端,然后每个端会支持很多机构。但并不完全相同。不知是否是这样,那我们假设我的理解的话,一个直白并且改动很小的方法就是每个端都定义一个属于自己的接口。pc端如果要支持,那就实现它。移动端如果要支持,那也实现它。注意所有的实现是可以写在一个大的Struct里面的,也不用显示申明你具体实现哪一个接口,这是go语言的优势。也就是说你拆接口时,实现代码基本可以不动。 然后我触发业务逻辑的地方大致这样: if processor, ok := financialEnd.(机构接口), !ok { 报错,说不支持改功能 } else { processor.<具体的方法> }
2018-09-08
共3条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程