首页 > 其他分享 >golang

golang

时间:2022-08-18 00:33:08浏览次数:70  
标签:Java 语言 golang go 开发 Go 底层

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,底层
From: https://www.cnblogs.com/zhoum/p/16597338.html

相关文章

  • golang改进errGroup
    需求在并发控制中,想实现以下功能1、并发超时控制2、一个出错,主程序退出3、兼容errGroup然后对errGroup进行一次改写packageutilsimport( "context" "errors"......
  • golang gin简介,特性,快速开始,小结
    简介Gin是一个用Go(Golang)编写的Web框架。它具有类似martini的API,性能要好得多,多亏了httprouter,速度提高了40倍。特性快速基于Radix树的路由,小内存占......
  • golang Sync.Mutex互斥锁和Sync.RWMutex读写锁小结
    Sync.Mutex一、结构体typeMutexstruct{stateint32//互斥锁的状态:被g持有,空闲等semauint32//信号量,用于阻塞/唤醒goroutine(协程)}//使用varmtx......
  • golang-rabbitmq 客户端参数
    一、交换器声明方法参数说明   func(ch*Channel)ExchangeDeclare(name,kindstring,durable,autoDelete,internal,noWaitbool,argsTable)error 参数......
  • Golang实现set
    背景Golang语言本身未实现set,但是实现了mapgolang的map是一种无序的键值对的集合,其中键是唯一的而set是键的不重复的集合,因此可以用map来实现setEmpty由于map是key-va......
  • golang之Redis
    Redis是一个基于内存的非关系型数据库,在项目开发中使用非常广泛,Go语言操作Redis需要使用三方包,我们选择支持Redis集群和Redis哨兵的go-redis包来讲述Go语言如......
  • golang之jwt的token登录
    什么是JSONWebToken?JSONWebToken(JWT)是一个开放标准(RFC7519),它定义了一种紧凑且自包含的方式,用于在各方之间以JSON方式安全地传输信息。由于此信息是经过数字签名的......
  • Golang框架之gin
    gin是目前golang的主要web框架之一,之所以选择这个框架是因为其拥有高效的路由性能,并且有人长期维护,目前github上的star数已经破3W。 ......
  • golang 企业转账到零钱
    packagemainimport("bytes""crypto/md5""crypto/tls""encoding/hex""encoding/xml""fmt""io/ioutil""net/http""net/u......
  • golang 实现生产者消费者模式(转)
    方法一:用两个通道+A协程sleep一个通道用来传数据,一个用来传停止信号。packagemainimport( "fmt" "time")//老师视频里的生产者消费者funcmain(){ //......