V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
corboy
V2EX  ›  问与答

Java vs go? 你们怎么看?

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

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

    第 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
        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   ·   实用小工具   ·   1036 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:56 · PVG 04:56 · LAX 12:56 · JFK 15:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.