|      1nomoon      2017-10-24 01:58:55 +08:00 if 是在转类型么?试试 case ?(虽然也好不到哪里去。。。 | 
|  |      2johnsneakers OP @nomoon if 嵌套是另外一个恶心的问题,  主要是他调一个 interface 方法有特么至少 3 个结构实现了这个方法, 我得一个一个看, 每个方法都特么乱七八糟 哎醉了 | 
|  |      3wweir      2017-10-24 07:44:26 +08:00 via Android 如果是不带 else 的 if 嵌套,是可以换种写法拉平的。 三种以上具体实现的 interface 不是标准玩法么,要是只有一种实现,去用 interface 那才是恶心。你需要的是对代码的熟悉以及一个高度集成的 IDE | 
|  |      4zjsxwc      2017-10-24 08:38:52 +08:00 这个有点恶心, 把 golang 写得和动态语言一样, 后面根本不好维护 | 
|  |      7nekoyaki      2017-10-24 09:26:14 +08:00 @mikulch  我的意思是 java 特别喜欢过度追求设计模式,别的语言里我感觉是没那么严重。 到 golang 里很多不需要靠设计模式就能完成的逻辑,如果过度追求设计模式,就会写成大量 interface 的过度包装形式了。 | 
|  |      8looplj      2017-10-24 09:33:03 +08:00 一个 interface 没有多个实现,那还要这个 interface 做什么?? | 
|      9yongzhong      2017-10-24 09:39:26 +08:00 interface 不是本来就是用来抽象然后多实现的吗? | 
|  |      10cabing      2017-10-24 09:52:17 +08:00 这样子很难维护~~ 你同事在坑你们项目组了。 就不能封装下吗?至少 alias 一下。。 | 
|      11zts1993      2017-10-24 10:05:31 +08:00 goland 可以分析 | 
|  |      12janxin      2017-10-24 10:14:17 +08:00 interface 不就是做这种抽象的嘛?不是很清楚,可能是 Java 程序员 XD | 
|  |      13HarrisonZ      2017-10-24 10:25:59 +08:00 我用 interface 有时候只是为了把不通层的代码分开,不一定有多个实现。我是觉得这样更好读一些。比如 rpc 层只处理 rpc 本身的逻辑,至于数据具体的存取,就放在数据层实现,rpc 层定义自己需要的存取 interface,数据层实现。不一定一个 interface 就一定要有多个实现吧。 | 
|      14SuperMild      2017-10-24 10:26:30 +08:00 静态语言一切都在源代码里定义清楚了,这个 interface 的具体实现是什么,在前面肯定有声明的,很容易搞清楚,另外用好的 IDE 也能帮你自动分析。 还可以善用 godoc,生成 html 文件看,结构非常清晰。 | 
|      15SuperMild      2017-10-24 10:28:41 +08:00 其实问题是项目本身复杂,用了 interface 已经算好的了,不用的话更难看 | 
|      16mengzhuo      2017-10-24 10:30:10 +08:00  1 明显用错了 比如 io.Reader 就只实现 Reader 的功能,不要再看各个 type 自己的实现才是 interface 的正确用法 | 
|      17jameshuazhou      2017-10-24 10:49:49 +08:00 能用就行了,至于代码、风格、神马之类的,当没有看到就好了。 | 
|  |      18hjc4869      2017-10-24 10:51:17 +08:00 @SuperMild golang 实现一个 interface 是 implicit 的,不需要声明实现,只要你实现了那几个函数就可以作为 interface 到处传,其实跟动态语言没啥区别,只是用鸭子类型的时候要先说好这个鸭子能干啥。 | 
|  |      19pubby      2017-10-24 10:59:17 +08:00 via Android 用 interface,if 都没毛病。看不到代码我们能说啥 | 
|      20SuperMild      2017-10-24 11:11:37 +08:00 @hjc4869 隐形实现并不影响分析,要当作 interface 用的时候还是必须先声明这个变量是个 interface 并且其具体实现是什么。 例如 var i InterfaceFoo = TypeBar{"hello"} 就说明 i 是一个 interface,其具体实现是 TypeBar。 | 
|  |      21araraloren      2017-10-24 11:53:41 +08:00 看不懂楼主在烦恼什么,鸭子类型就是这个样子,就拿 c++ 的模板来讲 template <typename T> void doSomething(T& t) { t.doFoo(); } 你在这里不借助 IDE 也不好说传进来的 t 到底是个什么类型,因为只要实现了 doFoo 函数接口 这里的调用就没有问题(类比于 golang 的 interface ) | 
|      22lixm      2017-10-24 13:53:49 +08:00 golang 的 interface 看起来确实很累,因为隐式实现, 尤其当 interface 的方法比较多的 | 
|      23GeruzoniAnsasu      2017-10-24 13:57:05 +08:00 到处都是 template 的 c++代码怎么阅读 到处都是 interface 的 java 代码怎么阅读。。。。 | 
|  |      25BBCCBB      2017-10-24 14:09:55 +08:00 ls +1, 辣鸡写什么都是辣鸡 | 
|  |      26ChristopherWu      2017-10-24 14:26:18 +08:00 啥需求会到处写 interface ?我认为都是在滥用了。。 写过一年 go,用到 interface 的地方屈指可数。 | 
|  |      27johnsneakers OP | 
|      28zts1993      2017-10-24 14:39:56 +08:00  1 @johnsneakers #27 高版本 goland interface 上有箭头可以列出所有实现。和 java 差不多 | 
|  |      29johnsneakers OP @araraloren 因为 go 是隐式实现啊, 根本不知道这个地方的方法具体实现是在哪里,需要一个一个实现看。 | 
|      30myself659410      2017-10-25 09:15:31 +08:00 interface 方便写代码,却实不方便读代码 | 
|  |      31freestyle      2017-10-29 23:50:12 +08:00 >>>我用的就是 goland, 请问咋分析, 这种实现 interface 的方法每次想看一跳转就跳到 interface 上面去啥都看不了。>>>我现在要看都是 ctrl+f 全文搜哪些地方在实现这个方法,每个地方实现都要看一下。 想死 @johnsneakers 更新一下 goland, interface{}左边有绿色按钮点击可以列出有哪些 struct 实现了这个 interface |