其他分享
首页 > 其他分享> > golang

golang

作者:互联网

Go与Java对比

用途场景

1.Java的用途

用途一:服务器后端系统开发(web后端、微服务后端支付系统、业务系统、管理后台,各种后台交互的接口服务)。
用途二:大数据框架的底层实现和Java的API支持。(Hadoop)。
用途三:其它中间件的底层开发。(Tomcat、RocketMq、Hbase、Kafka、SpringCloud,Dubbo...)。

特点

做服务端系统性能高。
有虚拟机,跨平台。
功能强大,支持的类库多,生态圈类库多,开发框架和工具更易找。

2.go用途

和Java一样,Go语言最多的应用场景就是服务器后端系统的开发,包括Web后端,微服务后端接口。

Go非常适用需要高性能高并发的网络编程,这里的网络编程是指不需要界面,底层只是用Socket相互传输数据的系统,类似于Java中Netty的用途。

一些云计算容器,比如Docker,K8s,底层就是Go语言开发的,也可以用做底层自研运维项目的开发。

一些游戏系统的开发,可以用Go语言。

区块链的一些底层软件和一些应用软件。(区块链程序的第一开发语言)
最大场景:网络最中间

GO产生

Go语言是Google内部公司大佬开发的,主要起因于Google公司有大量的C程序项目,但是开发起来效率太低,维护成本高,于是就开发了Go语言来提高效率,而且性能只是差一点。

语法区别

指针

C指针比较繁琐的在于指针运算

Go语言没有指针运算,go 指针只读

Go & 取地址,C C++ 引用(别名)同时也是取地址符

函数

函数是go语言一等公民,java一等公民是类

并发

Go并发 抢 java c c++ php市场的关键点

java 线程 Go routine(协程)

image-20220817222358593

//并发
go handle(conn)

在go语言中,一个线程就是一个Goroutines,主函数就是(主) main Goroutines。使用go语句来开启一个新的Goroutines

image-20220817223712468

完全等同于线程池任务?

线程池的task不具备协调能力,Golang中可以用channel来做协程协调(在用户空间模拟cpu切换)

go用同步的写法完成异步的操作

go没有切面编程(动态代理)

没有泛型

image-20220817222729931

Go内存管理

GO内存模型采用操作系统虚拟内存-物理内存思想

image-20220817232123968

分类型处理

共67种大小的空间,根据不同的对象大小分配不同类的空间中(存在浪费空间)。

image-20220817233844102

image-20220817235152492

image-20220817235720258

标签:Java,语言,golang,go,开发,Go,底层
来源: https://www.cnblogs.com/zhoum/p/16597338.html