1 node 不太可能
2 golang 也不太可能,我大概从 2012 年低开始用 go,2016 年开始全职用 go。看过无数的 go 语言的开源项目,能够把 go 语言用好的不多。
主要原因是,现在市面上的大规模教育和学习的方式是基于面向对象的模式构建的,所以大家形成了一套用面向对象模式解决问题的思路。
如果把 C 语言看成爷爷,C++就是儿子,C++这儿子把家族发扬广大光大,但是引入了太多东西,搞的太复杂,Java 就是孙子,把 C++这爹犯的错误纠正了一些,所以 Java 这孙子其实很多地方设计的刚刚好。
C++是 C 语言的扩展版,解决了很多不方便的问题,以及引入了新的编程模型,以及代码的组织方式,但是总体来说太复杂,所以实际工作中,用的都是 C++的子集,就怕新手喜欢秀特性,害怕别人不知道自己懂这个特性,非要到处用。
Java 是 C++的阉割版,相对于 C++来说,对语言进行了限制,让大家写代码不要那么潇洒任性。相对于 C 语言来说,限制了指针(同时也限制来手动内存管理),增加了面向对象模型(限制了多重继承)。
go 语言是在另一条路上改进的 C 语言
首先看一下这段 C 代码
```
struct bird {
char *name;
};
const char *bird_get_name(struct bird *b)
{
return b->name;
}
```
再来看一下这段 go 代码
```golang
struct Bird {
bird string
}
func (b *Bird) getName() string {
return
b.name}
```
在语法上改进了 C 语言的很多小问题,保留了指针,去掉了手动内存管理,加上了很多方便用的库
另外一个改进是,看一下 C 语言里面的命名方式 bird_get_name, 一般的 C 代码的命名方式是 模块+功能,例如内存模块可能是 mem_xxxxx. go 语言里面把模块组织成包,那么就变成了 mem.xxxxx,同时限制了包的循环引用。
这一个改进对于系统开发而言是非常好的,但是对于业务开发而言却不太好。
因为对于系统开发而言,很容易按照功能分模块,例如内存管理功能,文件系统功能等等,业务开发一般是分层模式。换句话说,go 语言很好的支持了按照模块组织代码,但是按照分层模式组织代码却很别扭,但是 java 两样都可以。
3
如果.net core 继续发展,
听说微软在.net 5 里面要搞成一个夸平台的,通用平台,取代 java 的很可能是 C#