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

做项目选择 golang 而不是 Java 的理由?

  •  
  •   slideclick · 291 天前 · 16423 次点击
    这是一个创建于 291 天前的主题,其中的信息可能已经有所发展或是发生改变。

    golang 是代替 java 的,因为两个都是 GC 语言 java 是 c++替代者第一代 golang 是 c++替代者第二代 (rust 无有 GC 所以真正进入了 linux windows kernel 而 golang 不能进入)

    做项目选择 golang 而不是 java 的理由? 并发来说,估计 java 的库也不错 选择 go 唯一的理由是没有 vm 所以节省内存?

    126 条回复    2024-12-20 19:32:31 +08:00
    1  2  
    ychost
        101
    ychost  
       289 天前   ❤️ 1
    @zhady009 是的,我服务端直接用 kotlin 了搭配 Groovy 美滋滋,基本能做到 .NET C# 的效率了
    ychost
        102
    ychost  
       289 天前
    @JKeita #3 .NET 的 nuget 可能比 maven 好用,但是 go mod 就算了
    zhady009
        103
    zhady009  
       289 天前 via iPhone
    @ychost 在性能不错的同时语法简洁易懂易读 api 用起来舒服
    lyz1990
        104
    lyz1990  
       289 天前   ❤️ 1
    很有道理
    我选 PHP
    Makabaka01
        105
    Makabaka01  
       288 天前
    从招聘角度来说,Go 招人更方便,不管什么语言都能拉来写 Go ,Go 生态没有 Java 那种一个项目用一万个第三方库的习惯。

    Java 现在的生态太好了,但是很多东西做的都很重,绝大多数项目根本用不到那么多东西,然后又喜欢用,搞得心智负担很重。如果招聘没有学习过 Java 这些库的人来做项目,估计得懵逼很久很久,勉强写起来心智负担也很重,会很难受。

    虽然 Go 这边说白了就是有点糙,但奈何大部分项目其实都是一个赛一个糙,搞那么精细就是自找麻烦。
    kingcanfish
        106
    kingcanfish  
       282 天前
    不想看到 xml 那屎片一样的东西,就这么简单
    xiaocaiji111
        107
    xiaocaiji111  
       281 天前
    看一帮评论都是没做过大项目的半吊子吧,语气还那么冲。
    roundgis
        108
    roundgis  
       279 天前 via Android
    @zjsxwc 路由器内存多大?以前试过 4 兆的会报 oom 错误
    roundgis
        109
    roundgis  
       279 天前 via Android
    @Yukineko 应该是指那些抽插数据库的应用 很早期那些系统只有 c cpp 可以写 后来 java 出现了 慢慢就迁移过去了
    zjsxwc
        110
    zjsxwc  
       278 天前
    @roundgis 你百度一下配置我型号都写了“小米路由器 4c”
    slideclick
        111
    slideclick  
    OP
       272 天前
    @jim9606 接着您说的 goproxy 请教两个问题 1)golang 只能源码共享库么? 能不能像 java 的 jar 一样发布二进制共享库被人使用 2) 墙内访问 github 很麻烦,这个解决起来轻松么?是不是类似 pip 等等需要一个国内镜像?
    slideclick
        112
    slideclick  
    OP
       272 天前
    @Jinnrry @lysShub @gamexg 接着您说的 github 库 请教两个问题 1)golang 只能源码共享库么? 能不能像 java 的 jar 一样发布二进制共享库被人使用 2) 墙内访问 github 很麻烦,这个解决起来轻松么?是不是类似 pip 等等需要一个国内镜像?
    gamexg
        113
    gamexg  
       272 天前
    @slideclick #112

    go 可以编译成静态库或动态库(dll),允许其它语言程序使用. 也可以加载其他语言编译出来的 dll.
    但是之前不能加载多个 golang 的 dll,因为多个 dll 的 go 运行时会冲突,现在不知道解决了没.

    另外还有个 Go Plugin , 应该类似于 jar 我没用过.


    go 有国内镜像 ( https://goproxy.cn/ https://goproxy.io/zh/ ), 设置个环境变量 go 就会从镜像代替 github 下载源码.
    gamexg
        114
    gamexg  
       272 天前
    @ZZ74 #40 go 的 几 M 大小运行时相对于换成 c 开发成本来讲,是可以接受的.
    我没用 java 开发过 windows/linux 平台, 但是看资料,运行时需要几十 M,相对于软件体积有点大.
    gamexg
        115
    gamexg  
       272 天前
    @ZZ74 #40 当然对于大型服务端业务,这个是小事. 相对于一些大型软件也是小事.
    jim9606
        116
    jim9606  
       272 天前
    @slideclick
    关于二进制包,曾经支持的,现在不支持了,因为较难维持 ABI 稳定。

    https://github.com/golang/go/issues/28152

    @gamexg 说的那种是 interprop ,这种其实用在任意语言 runtime 之间的互操作,runtime 是各自独立的,通信只能用 C 风格接口,通常也不能称作二进制库。
    gamexg
        117
    gamexg  
       272 天前
    @jim9606 #116 官方的 Go Plugin 倒是类似于其它语言的二进制包,能够提供 go 语言的函数导出 ,但是缺点是必须是完全一致的编译器编译的,不然可能会崩掉,而且不支持 windows. 我记得也只能加载,不允许卸载. 我没用过这个, 看起来不太符合二进制发布需求.


    另外还有个第三方实现的 https://github.com/hashicorp/go-plugin ,但是这个其实不是 dll 那种加载到同一进程空间的方式,而是将库作为独立程序运行,然后 grpc 通信. 但是这个封装的挺好, 用起来和单个程序内区别不大,甚至支持参数传递接口. 不过我也没实际在项目中用过.
    lysShub
        118
    lysShub  
       272 天前
    @slideclick 1 ,你说的就是动态库,当然可以 2. 不是有 goproxy, 有几个都很可靠关键是免费的
    slideclick
        119
    slideclick  
    OP
       270 天前
    @gamexg #113 谢谢, 国内镜像 不需要开发者源码级别改代码么
    比如 import github.com/auther/libname
    这个 github.com 在代码里面不改动,可以透明工作?感谢
    gamexg
        120
    gamexg  
       270 天前
    @slideclick #119

    不需要代码/项目做任何修改,只要设置环境变量, go 会自动使用环境变量指定的源码镜像.
    而且镜像支持不同站点的源码,不用管库的源码是在 github / gitlab 还是 google ,只要是公开的 git 库都可以自动处理.
    nooneanyone
        121
    nooneanyone  
       219 天前
    为啥老局限在后端赛道来比啊。
    cpp 本来就不在这个赛道竞争。
    yb2313
        122
    yb2313  
       121 天前
    @slideclick #11 看到了, java 写多了确实会伤到什么地方
    higker
        123
    higker  
       74 天前
    @cstj0505 赞成,有本事自己设计一门编程语言;不过我建议如果要设计编程语言可以考虑基于 JVM ,基于 JVM 设计编程语言好处是直接开发 AST 前端转换器,编译为字节码就可以,其他工作都交给 JVM 去做。Java 这么语言为个人感觉最大好处就是自定义,JVM 可以自定义,GC 也可以自定义,而且 JVM 生态也不错。
    higker
        124
    higker  
       74 天前
    @dcsuibian 写多了确实有这种感觉,graalvm.org 也不错
    joseph1994
        125
    joseph1994  
       17 天前
    @totoro52 你对 go module 特性一知半解就搁这质疑...,谁告诉你都要从 github 拉库
    totoro52
        126
    totoro52  
       2 天前
    @joseph1994 那你的意思是不用从 github 拉了是吧
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1957 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 16:12 · PVG 00:12 · LAX 08:12 · JFK 11:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.