V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  kidlj  ›  全部回复第 27 页 / 共 55 页
回复总数  1096
1 ... 23  24  25  26  27  28  29  30  31  32 ... 55  
@kidlj 当然,对于我上面说的关于 Go 的一堆,另外需要负责任地做一下提醒,当前国内的开发语言市场,Java 的市场是远大于 Go 的市场的,Go 的生态当前还主要集中在 Cloud Native 中间件,至于写业务和大数据,还是 Java 为主。所以对于当前想通过学 Go 来换工作的人,可能需要谨慎。但对于楼主这样的年轻人,两个都去学嘛,反正有大把时光。
那天在 V2EX 上看一个帖子,Java 的 super() 问半天没人讲得明白。学一门简单的语言,没有那么多复杂和不易掌握的特性,把时间放在更高层次的、更加通用的抽象上,比如设计,架构,分布式,算法上,不好吗?

我在 Twitter 上看到 Caddy server 的作者 Matt Holt 讲,Go 语言和 Go 社区,比他经历的任何其它一种语言 /社区教给他更多的 computing 知识(ref: https://twitter.com/mholt6/status/911041650738073600)。我也是这种感受。简单说几点:

1. Go 语言很简单,它的标准库,用 Rob Pike 的说法,very accessible,所以很容易理解和学习。
2. Go 解决问题的方式。某一年的 Go 社区的年度调查问卷,主要反映三个问题。包管理、错误处理和范型。就包管理来说,Russ Cox 至少写 10 篇博客(ref: https://research.swtch.com/vgo)来阐述包管理所遇到的问题,以及解释 Go modules 的设计和解决方案。不仅如此,Go modules 还能提供对之前 gopath,dep,vendor 等之前方案的兼容和无缝升级,最终还提供了比其它包管理更加清晰和简单的使用体验。对于 Go 的范型支持,Ian Lance Taylor 和 Robert Griesemer 大约研究了三五年了,最近才提出了一个 draft design,而且还在不停修正,比如前几天 Robert 做了一个用 parameterized interface 来替代 contracts 的实验(ref: https://twitter.com/bradfitz/status/1206446785373196288)。Go 的错误处理也是类似,渐进地推出 draft design 和 proposal,听社区的反馈,而后进行集成或者丢弃。Go 语言从 1.0 到现在 1.13 ,语言核心特性几乎没有发生什么变化,甚至到将来引入范型都能一直保持向后兼容。我举这几个示例是想说明,Go 核心开发者( Google )解决事情的方式,以及他们对待问题的态度,真的教给我们很多。
3. 写 Go 真的很快乐,前提是你认可 Go 语言所呈现出来的哲学。一门比 Python 更好地继承了 Zen of Python 哲学的语言(ref: https://go-proverbs.github.io)。Go 的 package 的概念比我见过的其他语言的包的概念都要简单,用首字母大小写导出替代 public/private,松耦合的 interface 实现,struct composition 代替 Class (从而没有多重继承),甚至只有一种循环关键字 for,简单的并发,对单元测试的直接集成( Test_ or Example_),'go' cmd line tool 对核心功能的集成(编译、性能分析、错误检查、格式化、包管理、测试等)。对于很多人争议的 Go 的错误处理(if err != nil),Go 开发者也承认这不太「完美」,也在着手解决,但他们认为这种方式相比较 Try-Catch 首先是「正确」的((ref: https://devblogs.microsoft.com/oldnewthing/20040422-00/?p=39683)),所以 Go 采用的是正确了方式,即使一开始看起来麻烦一点。所有这些 Go 的设计和特性呈现出来的东西,如果让我用一个词来形容,那就是“合理”。这是一门合理设计的语言,专注于解决大规模软件的「工程性」问题,而不是另造一门「创新」的语言(ref: https://changelog.com/gotime/100)。
4. Go 的生态。Cloud Native 生态大部分开源项目都是用 Go 写的,包括 Kubernetes, Istio, Docker, CoreNS, Prometheus 等,Envoy 除外。Cloud Native 及 Service Mesh 的影响是,将来用什么语言开发业务不再重要,service mesh 会为各种语言开发的服务提供统一的抽象和上层管理,业务的归业务,管理的归管理。如果说基础设施层是 C 和 C++ 或者将来的 Rust 的,那么中间 DevOps 层就是 Go 的,再上面是其他语言的业务层。那天看到一条评论说,istio 的微服务管理对于 Spring Cloud 的微服务管理是降维打击,因为一个是在 DevOps 层解决问题,一个在语言层解决问题。当然 Java 当前生态是巨大的,有很多厉害的开源中间件,比如 ElasticSearch,Kafa,大数据生态等。那天看 Go 的未来规划,有一个重点是在近几年推动 Go 语言作为大学的教学语言。作为一门才诞生十年的语言,取得这样的成就已经很了不起的,但更可以预见将来 Go 生态会有更大的发展,也会开拓出其他的中间件生态,比如 TiDB 就是一个例子。

所以,以上说了这么多,总结起来就是,Go 语言容易学,也容易用,设计合理,核心开发者靠谱,社区很繁荣,生态在发展,现在上车最好不过了。
2019-12-21 21:54:20 +08:00
回复了 gramyang 创建的主题 问与答 八卦问题:哪些学校的计算机系会开 unix 环境编程的课?
计算机二级考试还是 turbo c 吗?
2019-12-20 15:23:37 +08:00
回复了 KYLINZZ 创建的主题 问与答 怎么看待电脑使用有道翻译,鼠标到哪翻译到哪的人
何不食肉糜?
2019-12-18 19:19:19 +08:00
回复了 qwertyzzz 创建的主题 程序员 Go 的正确目录是啥啊。。
这是什么学习习惯?有文档不先看,上来就问?
文言语言结构比白话文严谨,更适合编程。
2019-12-13 11:32:50 +08:00
回复了 kidlj 创建的主题 随想 人类真的太棒了!
@cmdOptionKana 还不是全功能的 ORM,因为刚刚开源不久,离 1.0 还远。比如在 O2M 的关系中( A user has many pets ),还不能一次查询获取某个 user 及其所有的 pets 到一个 user struct 中(所谓 eager loading ),但已经在支持计划中了,而且看设计比 Gorm, go-pg 等的实现方式要好。
2019-12-13 11:29:25 +08:00
回复了 kidlj 创建的主题 随想 人类真的太棒了!
@inhzus 谢谢。生活还行。
2019-12-13 11:28:58 +08:00
回复了 kidlj 创建的主题 随想 人类真的太棒了!
@CEBBCAT 我所在的公司,做 K8S 平台的,Go 的人还是很难招到的。当前 Go 语言应用最广的就是 K8S 了,人才缺口也大,如果感兴趣可以从这个方向上车。做 Web 的话,Go 的生态还是不如 Java,但也有一些大厂在用 Go 做微服务,这个领域不太了解。总之,现在正是学 Go 和应用 Go 的好时机,机会不多的话可以试试北京、上海等一线城市。
2019-12-13 11:23:23 +08:00
回复了 kidlj 创建的主题 随想 人类真的太棒了!
@snxq1995 @hahasong 就是更简单了。我对比过 Gorm,go-pg/pg 等好几个 Go ORM 和 SQL builder,ent 真的是最简单的,抽象层次更高,官方文档看上半个小时就能够了解了。
2019-12-12 15:05:51 +08:00
回复了 GeT1t 创建的主题 硬件 想问下大家上班听歌用什么耳机
@GeT1t Macbook
2019-12-11 20:00:38 +08:00
回复了 GeT1t 创建的主题 硬件 想问下大家上班听歌用什么耳机
MSR7B
2019-12-03 12:09:37 +08:00
回复了 eGlhb2Jhb2Jhbw 创建的主题 问与答 为啥没有人整个 QZone 非主流风格的博客?
写博客本身还不够非主流吗?
2019-11-30 21:48:40 +08:00
回复了 mamahaha 创建的主题 Go 编程语言 go 语言流程语句后边不加括号有什么好处吗?
因为 for 不加,所以 if 也不加。

for 不加是因为 for 循环除了:

for init; condition; post { }

for condition { }

for { }

这三种类 C 的循环用法以外,还有如下类 Python for...in 的用法:

for key, value := range oldMap {
newMap[key] = value
}

for...range 除了示例中的 map 还可以用于 slice,array 和 channel,这个时候加括号是没有意义的( python 中的 for...in 同样也没有括号。)

所以这是一种统一,用一个 for 关键字支持了类似 C 的 for 和 while,以及 Python 中的 for...in 。

Go 还有一些类似的设计,比如不提供 set,使用 map 代替。
2019-11-29 18:57:29 +08:00
回复了 lovelynn 创建的主题 程序员 IPV6 会带来哪些技术改革和机会?
最直观的感受,ping 起来不方便了。
2019-11-22 22:10:46 +08:00
回复了 n2l 创建的主题 问与答 MacOS10.14.5 如何关闭 AppStore 的右上角更新提醒
很简单,从 Dock 移走。
1 ... 23  24  25  26  27  28  29  30  31  32 ... 55  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4614 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 35ms · UTC 09:57 · PVG 17:57 · LAX 02:57 · JFK 05:57
Developed with CodeLauncher
♥ Do have faith in what you're doing.