Java vs go? 你们怎么看? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
corboy
V2EX    问与答

Java vs go? 你们怎么看?

  •  
  •   corboy 2017-05-02 16:46:43 +08:00 16155 次点击
    这是一个创建于 3084 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果一个新人学一门语言,你们推荐学什么?

    第 1 条附言    2017-05-03 10:37:17 +08:00
    谢谢各位的回答。

    忘了说明了,我是个两年的 php。
    问这个问题的目的是为了比较 java 和 go 的将来,想听听大家的看法。

    我个人是看好 java
    1. 历史沉淀原因,各种解决方案齐全
    2. 工程化能力强,当项目复杂度上升后,这点极为重要
    65 条回复    2017-05-03 17:04:37 +08:00
    zhujinliang
        1
    zhujinliang  
       2017-05-02 17:49:43 +08:00
    golang
    jarlyyn
        2
    jarlyyn  
       2017-05-02 18:02:53 +08:00
    go
    jkneedout
        3
    jkneedout  
       2017-05-02 18:04:28 +08:00 via iPhone
    那么问题来了,Go 看什么书好呢!
    @jarlyyn
    @zhujinliang
    Cbdy
        4
    Cbdy  
       2017-05-02 18:14:07 +08:00 via Android
    这年头还在 vs 编程语言?当然是选择都学
    corboy
        5
    corboy  
    OP
       2017-05-02 18:20:17 +08:00
    @zhujinliang
    @jarlyyn
    麻烦能列举几个原因吗
    jarlyyn
        6
    jarlyyn  
       2017-05-02 18:29:51 +08:00
    @corboy

    简单易上手……
    jarlyyn
      &nsp; 7
    jarlyyn  
       2017-05-02 18:30:17 +08:00
    @jkneedout

    看什么书,操起 vsc 就是干
    zhujinliang
        8
    zhujinliang  
       2017-05-02 18:41:53 +08:00   2
    赚钱,还是 java 吧,golang 目前还有点远

    golang 语法简单,语言要素少,易学易用
    直接编译为可执行文件,不需环境,不需其它依赖,单文件方便携带,常见平台都可编译
    自带效率靠谱的 goroutine,自带多线程通信机制 channel,多线程编程很容易
    有需要的话还可以混合 C 语言,直接 include C 的库
    内存占用不大,执行效率不错,不需 JVM 预热,目前没反编译工具

    @corboy
    mortonnex
        9
    mortonnex  
       2017-05-02 18:49:02 +08:00
    都挺好的
    gouchaoer
        10
    gouchaoer  
       2017-05-02 19:00:45 +08:00 via Android   1
    java 吧,go 设计有问题,用途有限,库不成熟
    maemual
        11
    maemual  
       2017-05-02 19:03:12 +08:00
    新人有多新,如果是没学过编程的建议 Java
    Srar
        12
    Srar  
       2017-05-02 19:12:50 +08:00   2
    其实我想说新手建议学 C# (
    jarlyyn
        13
    jarlyyn  
       2017-05-02 19:15:14 +08:00   1
    @gouchaoer

    115 天前还在问

    “对于 POST 的数据,为什么要发明一个 application/json 类型“

    今天已经能对各个语言的设计和用途指点江山了。

    这个升级速度容本菜鸟膜拜一个。
    gouchaoer
        14
    gouchaoer  
       2017-05-02 19:19:43 +08:00 via Android   1
    @jarlynn
    我是高级爬虫开发工程师,你不要小看我哦,我还是比较厉害的
    sagaxu
        15
    sagaxu  
       2017-05-02 19:21:31 +08:00
    Java 和 Go 冲突吗?我的建议是两个都学
    murmur
        16
    murmur  
       2017-05-02 19:23:43 +08:00
    java java 添砖加瓦 说明 java 才是大型应用的基石

    j2ee 捷途易易 说明使用 java 开发 web 会让你收到事半功倍的效果

    语言可以学 信仰不能丢
    whatisnew
        17
    whatisnew  
       2017-05-02 19:42:46 +08:00
    明显要学 java
    wwqgtxx
        18
    wwqgtxx  
       2017-05-02 19:48:12 +08:00   4
    @gouchaoer 我还是共产主义接班人呢,看看谁厉害
    colincat
        19
    colincat  
       2017-05-02 19:49:12 +08:00 via iPhone
    明显 Java
    gouchaoer
        20
    gouchaoer  
       2017-05-02 20:34:33 +08:00 via Android
    @wwqgtxx
    你不要小看高级爬虫工程师哦,就算是爬虫这种入门级别的工作,要做好还是很不容易的呢
    0915240
        21
    0915240  
       2017-05-02 21:16:55 +08:00 via iPhone
    java 码农 一直在学 go
    互补不足吧
    WildCat
        22
    WildCat  
       2017-05-02 21:23:24 +08:00   1
    @jkneedout Golang 只有一本书值得看:The Go Programming Language: https://www.amazon.cn/s?_encoding=UTF8&field-keywords=The%20Go%20Programming%20Language&search-alias=books

    其他都不要看,几乎都是垃圾
    fox0001
        23
    fox0001  
       2017-05-02 21:26:36 +08:00 via Android
    Java 吧,非常成熟,而且找工作容易一些
    sillyousu
        24
    sillyousu  
       2017-05-02 21:27:31 +08:00   1
    @gouchaoer
    围观大神把谷歌的弱鸡按在地上磨擦
    elone
        25
    elone  
       2017-05-02 21:30:18 +08:00
    学 java 入门,再学 GO,因为学 GO 很简单。
    scnace
        26
    scnace  
       2017-05-02 21:36:58 +08:00 via Android
    不看
    answeryou
        27
    answeryou  
       2017-05-02 22:00:18 +08:00
    PHP 是世界上最好的语言
    levn
        28
    levn  
       2017-05-02 22:11:55 +08:00
    听说该学 elixir 了?
    lwbjing
        29
    lwbjing  
       2017-05-02 22:43:01 +08:00
    翻到 27#才看到我要的答案,现在整个 V 站是怎么了。。
    xrlin
        30
    xrlin  
       2017-05-02 23:43:15 +08:00 via iPhone   1
    以前一直觉得 java 繁琐,但现在不得不说 java 真的适合大工程,包含了很多设计理念,而且工具类库多,虽然近两年没写过 java 了,但学 java 加深了我对设计、面向对象的理解,所以要选的话就 java 吧。
    sagaxu
        31
    sagaxu  
       2017-05-02 23:44:14 +08:00
    @gouchaoer 你司还有爬虫 title 的,威武
    hpeng
        32
    hpeng  
       2017-05-03 07:33:55 +08:00 via iPhone
    一起学很难吗?手动滑稽
    libook
        33
    libook  
       2017-05-03 08:29:41 +08:00
    学 C
    maomo
        34
    maomo  
       2017-05-03 09:54:05 +08:00
    新人为什么不学 Python ?
    gouchaoer
        35
    gouchaoer  
       2017-05-03 09:58:00 +08:00   1
    @sagaxu 是的,我是国内少有的高级爬虫开发工程师,看我 offer:
    issues
        36
    issues  
       2017-05-03 10:02:29 +08:00
    工作用 java 业余用 golang
    golang 写的一个小工具,配合 crontab 实现定时生成 vultr 快照
    package main

    import (
    "os/exec"
    "encoding/json"
    "time"
    "os"
    "log"
    "fmt"
    )

    const (
    CMD = "curl"
    // Api 密钥
    API_KEY = "API-Key:xxx"
    SNAPSHOT_LIST_URL = "https://api.vultr.com/v1/snapshot/list"
    SNAPSHOT_DESTROY_URL= "https://api.vultr.com/v1/snapshot/destroy"
    SNAPSHOT_CREATE_URL = "https://api.vultr.com/v1/snapshot/create"
    // 实例 id
    SUB_ID = "xxx"
    H_ARG = "-H"
    DATA_ARG = "--data"
    )


    type Snapshot struct {
    ID string `json:"SNAPSHOTID"`
    CreateDate string `json:"date_created"`
    Description string `json:"description"`
    Size string `json:"size"`
    Status string `json:"status"`

    }

    func main() {
    // 日志记录到文件
    var fileName string
    fileName = time.Now().Format("2006-01-02") + ".txt"
    logFile,err := os.Create(fileName)
    defer logFile.Close()

    if err != nil {
    log.Fatalln("open file error !")
    }

    log.SetOutput(logFile)
    log.Println(time.Now().Format("2006-01-02 15:04:05"), "task start...")

    // 获取快照列表
    var needDestory bool = true
    snapshotsCmd := exec.Command(CMD, H_ARG , API_KEY, SNAPSHOT_LIST_URL)
    snapshotsResponse, _ := snapshotsCmd.Output()
    var snapshots map[string]Snapshot
    json.Unmarshal(snapshotsResponse, &snapshots)


    // 快照数量
    if len(snapshots) < 11 {
    needDestory = false
    }
    log.Println(time.Now().Format("2006-01-02 15:04:05"), "snapshot number ", len(snapshots))

    // 如果快照数量超过最大限制 11 时,则删除最早的那个快照
    if needDestory {
    var destroyID string
    var theEarliestDate= time.Now()

    for _, value := range snapshots {
    tempDate, _ := time.Parse("2006-01-02 15:04:05", value.CreateDate)

    if tempDate.Before(theEarliestDate) {
    theEarliestDate = tempDate
    destroyID = value.ID
    }

    }

    log.Println(time.Now().Format("2006-01-02 15:04:05"), "destroy snapshot ", destroyID)
    destroySnapshotCmd := exec.Command(CMD, H_ARG, API_KEY, SNAPSHOT_DESTROY_URL, DATA_ARG, fmt.Sprintf("SNAPSHOTID=%v", destroyID))
    destroySnapshotCmd.Output()
    // 延时 30 秒,防止删除快照时,出现未知错误
    time.Sleep(time.Second * 10)
    }


    // 创建一个快照
    createSnapshotCmd := exec.Command(CMD, H_ARG, API_KEY, SNAPSHOT_CREATE_URL, DATA_ARG, fmt.Sprintf("SUBID=%v", SUB_ID))
    createSnapshotResponse, _ := createSnapshotCmd.Output()
    var createSnapshot map[string]string
    json.Unmarshal(createSnapshotResponse, &createSnapshot)
    createSnapshotID := createSnapshot["SNAPSHOTID"]

    log.Println(time.Now().Format("2006-01-02 15:04:05"), "create snapshot", createSnapshotID)
    log.Println(time.Now().Format("2006-01-02 15:04:05"), "task end")

    }
    Muninn
        37
    Muninn  
       2017-05-03 10:07:41 +08:00
    你去你目标工作的城市搜一下 golang 的职位。 一般都是偏创业的,喜欢这些公司的话就学 go 吧。

    不过能来问这种问题,一般推荐学 java,至少好找工作。

    那些 go 很厉害的,都不是靠 go 找到工作的。。。
    buru
        38
    buru  
       2017-05-03 10:33:23 +08:00
    先学 php 找工作,再学 go 当第二门语言
    M4ster
        39
    M4ster  
       2017-05-03 10:42:36 +08:00   1
    写 Java 是不可能写 Java 的,这辈子都不可能写 Java。Golang 又不会写,就是写 Python 这种东西,才能维持得了生活这样子。在家里面一个人日站又很无聊,都没有友仔友女玩,写 JS 的个个都是人才,说话又好听,超喜欢在里面的。
    bk201
        40
    bk201  
       2017-05-03 10:49:51 +08:00
    go 只是玩具,压根不能和 java 放一个台面上讲。
    ikaros
        41
    ikaros  
       2017-05-03 10:55:17 +08:00   1
    看到某楼简直要笑哭。。。。。。。。。。。。。。。。
    bugmenot3
        42
    bugmenot3  
       2017-05-03 11:09:30 +08:00
    看不出来有什么理由选择 Java 不选择 C# 。
    agtc
        43
    agtc  
       2017-05-03 11:11:58 +08:00
    大数据方面还是要用 java,生态太强大了
    agtc
        44
    agtc  
       2017-05-03 11:12:26 +08:00
    写写接口,go 很方便
    BoiledEgg
        45
    BoiledEgg  
       2017-05-03 11:22:34 +08:00
    学着玩用 go,找工作用 java。

    go 的生态其实现在已经很不错了,只是没有一套标准用法,初学的话得查不少资料,比如 benchmark 之类的去做对比,大量的新轮子需要被大浪淘沙。这一点很可怕,新轮子太多,而且不少是个人维护,可能一不小心就有一个轮子停止维护了。

    java 生态就不说了,成熟到可怕,基本上就那三板斧就能解决大多问题,满大街都是教程。

    另外,其实语法层面我也没觉得 go 有多大优势,java 不爽了那么改用 kotlin 就好,而且 kotlin 现在也有支持 coroutine 了。
    性能上的话,go 的垃圾回收现在跟 java 还是有差距的。

    以上是一个 java 开发,正在学 go 玩的感受。
    RqPS6rhmP3Nyn3Tm
        46
    RqPS6rhmP3Nyn3Tm  
       2017-05-03 11:30:37 +08:00 via iPhone
    Go 编译出的是单个二进制文件,交叉编译非常之方便,就算是 arm 也可以用得很爽且效率高。
    我不会 go,但是前几天的经历让我被圈粉了
    znood
        47
    znood  
       2017-05-03 11:33:29 +08:00
    可能要看你领域了,如果是大数据领域、安卓开发那就 Java 了
    如果是 DevOps、Docker 容器、微服务就学 Golang

    总之不管怎么说都学也没坏处,我用 Golang 开发(原来用 C++)开发效率快很多,Java 代码也能看懂能改,但是要写就有点困难。
    语言只是工具,解决问题才是根本。
    unity0703
        48
    unity0703  
       2017-05-03 11:34:11 +08:00
    非要选一个的话,那就 java 吧,就业好很多

    @issues 这代码不如 python 简洁,golang 其实就是个 better c,不过对于 c 和 c++来说,go 还是非常爽的
    @levn elixir 不错,强烈推荐
    corboy
        49
    corboy  
    OP
       2017-05-03 11:45:06 +08:00
    @znood 是否简单可以总结为,Java 偏宏观,Golang 偏微观 ?
    znood
        50
    znood  
       2017-05-03 11:55:49 +08:00
    @corboy #49 不能,因为一些历史原因大数据领域尤其是 Apache 家族使用 Java 实现的很多,而 Docker 使用 Golang 带动了容器领域用 Golang 的多
    chunshuai
        51
    chunshuai  
       2017-05-03 11:58:59 +08:00
    go 吧
    phrack
        52
    phrack  
       2017-05-03 12:16:53 +08:00 via Android
    我能推荐 Javascript 么。。。
    sagaxu
        53
    sagaxu  
       2017-05-03 12:38:54 +08:00 via Android
    @BoiledEgg go 的 gc 目标是 low latency 不是 high throughput,jvm 是提供四种主要 gc 和十几个参数你自己定目标
    DT27
        54
    DT27  
       2017-05-03 13:11:57 +08:00
    C# !!!
    Lpl
        55
    Lpl  
       2017-05-03 13:25:08 +08:00
    目前两个都是主要语言在用。

    Java 的话市场容量会大不少,Go 的市场容量比 Java 的小很多;
    使用场景不一样,Go 一般会用来偏向做基础服务,Java 一般会用来做应用;
    Java 走 Web 的话入门还有到熟练需要的时间长,Go 会简单很多。

    要是推荐的话就推荐 Java 了,我是从 Java 入的 Go。毕竟 Java 的市场占有量比较大。但是..要是有另外一个选择的话,我推荐 Node,不是所有公司的岗位都要 Java/Go,但是每个公司都需要前端工程师。
    WytheHuang
        56
    WytheHuang  
       2017-05-03 13:44:30 +08:00 via Android
    某楼感觉像孩子,说话语气幼稚不行
    btjoker
        57
    btjoker  
       2017-05-03 14:50:03 +08:00
    自己喜欢, 两种语言侧重不同
    想稳就是 java
    Immortal
        58
    Immortal  
       2017-05-03 15:12:19 +08:00
    个人偏向 golang
    也写了 1 年多了 至少目前来说挺不错
    longbye0
        59
    longbye0  
       2017-05-03 15:12:56 +08:00 via Android
    @WytheHuang 别人是故意的哦
    TangMonk
        60
    TangMonk  
       2017-05-03 15:16:31 +08:00 via Android
    java 靠谱
    Kaho
        61
    Kaho  
       2017-05-03 16:17:13 +08:00
    PHP 是世界上最好的语言
    solee
        62
    solee  
       2017-05-03 16:29:30 +08:00
    @phrack 用 node 的飘过
    solee
        63
    solee  
       2017-05-03 16:35:49 +08:00
    java 转到 node 很久了,go 也会写一点....
    个人觉得微服务喜欢用 node,有 pm2 这种管理工具。
    密集计算的喜欢用 go,但是觉得 go 的管理和 orm 实在不方便。
    Java 很久没写过了记得当时在用 Spring boot 了,觉得写起 restful 的服务还是没有 node 那种爽快感。
    twor2
        64
    twor2  
       2017-05-03 16:45:54 +08:00
    @longbye0 想给他点个赞
    WytheHuang
        65
    WytheHuang  
       2017-05-03 17:04:37 +08:00
    @longbye0 看来我智商捉急
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     953 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 22:51 PVG 06:51 LAX 15:51 JFK 18:51
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86