V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
flyspace15
V2EX  ›  Go 编程语言

Go 适合用面向对象的方式编程吗?

  •  
  •   flyspace15 · 2017-06-08 10:32:37 +08:00 · 3475 次点击
    这是一个创建于 2727 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚入坑,网上看了一些关于 Go 中使用面向对象的方法,感觉很难理解

    25 条回复    2017-06-09 10:52:55 +08:00
    reus
        1
    reus  
       2017-06-08 10:41:02 +08:00
    当然不适合。不要照搬其他语言的写法。
    plqws
        2
    plqws  
       2017-06-08 11:35:03 +08:00 via iPhone
    oop 和 fp 都鸡肋的一门神奇语言
    rrfeng
        3
    rrfeng  
       2017-06-08 11:52:33 +08:00
    面向 err != nil 编程 XD

    其实是面向接口编程。接受了这个设定还蛮不错的
    holmesabc
        4
    holmesabc  
       2017-06-08 11:53:03 +08:00
    把 Go 看做 C,一切豁然开朗
    hjc4869
        5
    hjc4869  
       2017-06-08 11:54:09 +08:00 via Android
    不适合
    Morriaty
        6
    Morriaty  
       2017-06-08 12:04:29 +08:00
    go 没有继承
    SuperMild
        7
    SuperMild  
       2017-06-08 12:17:43 +08:00
    golang 连 class 都没有,所谓的方法也只是函数的语法糖。

    不过不支持经典的面向对象是故意设计成这样的,有很多优点。
    gowk
        8
    gowk  
       2017-06-08 12:43:40 +08:00   ❤️ 1
    fatedier
        9
    fatedier  
       2017-06-08 12:54:07 +08:00
    面向接口编程
    inFinityzc
        10
    inFinityzc  
       2017-06-08 17:05:59 +08:00
    面向 err != nil 编程 +1
    flyspace15
        11
    flyspace15  
    OP
       2017-06-08 17:14:43 +08:00
    @gowk 就是看打这篇文章的翻译版,感觉如果这么搞面向对象,代码写起来应该会很痛苦,看代码的人更痛苦吧
    weer0026
        12
    weer0026  
       2017-06-08 17:19:46 +08:00
    这么一说是不适合,我之前还一直硬写成面向对象的,思维僵化了。
    @SuperMild #7
    0asis
        13
    0asis  
       2017-06-08 17:40:29 +08:00 via iPhone
    学了半天 Clojure 发现没有什么应用场景,弃坑了,可惜了这么优美的语法(以及若干买书的钱)
    lepig
        14
    lepig  
       2017-06-08 17:48:18 +08:00
    想请教下。没有 C/C++/Java 基础可以直接学 Go 吗?

    第一门语言是 PHP
    xyjtou
        15
    xyjtou  
       2017-06-08 18:19:34 +08:00
    @0asis

    据说 Clojure 是当今全球程序员薪资排名第一的开发语言呐
    ThinkCat
        16
    ThinkCat  
       2017-06-08 18:21:32 +08:00
    @0asis clojure 这 lisp 语法看上去 确实好新鲜
    vus520
        17
    vus520  
       2017-06-08 18:23:47 +08:00   ❤️ 2
    @lepig 有 php 的基础很容易入门,理解指针和引用会麻烦一点。

    对了,处理 Json 会让你无比怀念 php。
    0asis
        18
    0asis  
       2017-06-08 18:43:00 +08:00 via iPhone
    @xyjtou 大概是因为 lisp 的语法拦住了大部分初级程序员吧
    u5f20u98de
        19
    u5f20u98de  
       2017-06-08 19:04:06 +08:00
    Go 有面向对象?其实那只是操作结构体的函数而已。

    还有 err != nil 不一定非要这么写这么多,
    如果有大量出错就不继续执行的可以封个 func 有错误直接 panic 然后在 defer 里 recover 下,省好多事情。
    nazor
        20
    nazor  
       2017-06-08 21:20:46 +08:00
    有得必有失,要是非常完美,那就会淘汰很多语言了。
    SlipStupig
        21
    SlipStupig  
       2017-06-08 23:06:35 +08:00
    @Morriaty 还是又继承的,跟 C 语言一样,可以采用 struct 继承
    zjsxwc
        22
    zjsxwc  
       2017-06-08 23:18:56 +08:00 via Android
    应用 oop 的思想完全没问题,虽然没有了继承,但仍旧可以使用组合以及 mixin 的方式来处理对象关系。
    HarrisonZ
        23
    HarrisonZ  
       2017-06-09 08:52:06 +08:00
    golang 适合 oop 啊,只是不要继承,使用组合的方式扩展类。interface 完美支持 多态。还不要多余的声明,只要实现了 interface 定义的方法即可
    HarrisonZ
        24
    HarrisonZ  
       2017-06-09 08:53:25 +08:00
    @SlipStupig struct 怎么继承,最多是组合吧。Rob pike 特别不喜欢继承
    qianguozheng
        25
    qianguozheng  
       2017-06-09 10:52:55 +08:00
    go 注重设计。而不仅仅是代码复用。
    效率是她的一大特征。

    面向对象,你想写当然可以,更何况 C 都可以封装
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2768 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 15:13 · PVG 23:13 · LAX 07:13 · JFK 10:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.