最近开始学习Golang 最好奇的并不是单纯的学这门技术,而是想弄清楚

Golang,究竟在什么方面可以”完爆“ Java ?

毕竟作为对Java还算熟悉的老开发来说,要让我去深入学习另一门语言,必须要有足够充分的理由。 换句话说,凭什么TA可以替代Java?如果只是一些花活上的优势,那就没有太多的意义。

所以,决定从以下多个维度进行比较。 这个过程会要持续较常的时间,所以这篇文档会逐渐更新,你当前看到的,基本上不会是定稿,而且很可能会有错误,我会不断调整,所以欢迎指正。

Golang 更严谨的风格?以及异常规范 Golang 并发编程 VS Java 并发编程

编写一个小工具,模拟高并发请求,进行压力测试

场景1 Golang使用原生协程,Java使用线程池

从真实的并发量,客户机的CPU与内存占用率等指标来看,这方面Golang完爆Java Golang轻松达到5000+的并发量,瓶颈全部是在服务端的连接数与响应时间

Golang 代码
package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {

	for {
		max := 0

		fmt.Println("please input max count...")
		fmt.Scanln(&max)

		barrier := make(chan int, max)

		for i := 0; i < max; i++ {
			go visitWeb(barrier, i)
		}

		for i := 0; i < max; i++ {
			<-barrier
		}

	}

}

func visitWeb(barrier chan int, idx int) {

	resp, err := http.Get("http://localhost:8080/hello")
	if err != nil {
		fmt.Println(err)
		return
	}
	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	fmt.Println(idx, " : ", resp.StatusCode, ",", string(body))
	barrier <- idx
}

场景2 Golang使用原生协程,Java使用Nio

Golang 协程 能完爆 Java NIO 吗? Golang VS Java 同类型场景的内存占用

提供Web服务

提供RPC服务

大文件读取

Golang 处理常见辅助性问题时与 Java 对比