Go语言适用场景

Hey,我是寅贝勒,大厂后端开发一枚😜,欢迎来我的个人网站 www.ly-zone.cloud 一起学习交流~

一、Go语言特性

在这里插入图片描述

1.天然支持并发

  • 创建、销毁协程代价小
    简单来说就是协程占用的内存要远小于进程、线程,Goroutine所需要的内存通常只有2kb,而线程则需要1Mb(500倍),所以Go中会大量使用协程,一言不合就并发。
  • 切换开销小
    当一个cpu从一个线程切换到另一个线程时,cpu需要保存当前线程的本地数据,程序当前的指针等,然后加载下一个等待执行的线程的本地数据,程序指针等。这种切换被称之为上下文切换,cpu从执行一个线程切换去执行另一个线程需要耗费大量的时间和资源,这个叫做切换成本。
    在这里插入图片描述

在这里插入图片描述

  • 并发调度模型
    如何去设计Go中的调度器就显得尤为重要,CSP、GMP

2.自动垃圾回收

垃圾回收是释放掉那些不再被使用的的内存空间的过程。换句话说,垃圾回收器会去检查哪些对象超出范围并且不会再被引用到,然后它会去释放掉那些对象占用的内存空间。其实这个过程是在Go程序运行中也是以并发的方式去进行的。

3.构建速度很快

编译和链接到机器代码的速度极快,一般情况下构建一个程序的时间只需要数百毫秒到几秒,整个 Go 语言标准库的编译时间一般都在 20 秒以内。这不仅极大地提升了开发者的生产力,同时也使得软件开发过程中的代码测试环节更加紧凑,而不必浪费大量的时间在等待程序的构建上。

4.支持交叉编译

  • 与Java相比,Golang有一个明显的优势是它可以直接编译出可执行文件,然后扔到任意机器上运行,而Java编译出的jar则需要在目标机器上先安装JDK或JRE才能运行。
  • Go语言支持交叉编译, 可以在一个平台编译另外一个平台可以执行的文件。
  • 这是第一门完全支持 UTF-8 的编程语言,这不仅体现在它可以处理使用 UTF-8 编码的字符串,就连它的源码文件格式都是使用的 UTF-8 编码。Go 语言做到了真正的国际化

5、将静态语言的安全性和高效性与动态语言的易开发性进行有机结合

Go 语言是一门类型安全和内存安全的编程语言。虽然 Go 语言中仍有指针的存在,但并不允许进行指针运算。
Go 语言的另一个目标是对于网络通信、并发和并行编程的极佳支持,从而更好地利用大量的分布式和多核的计算机。这个特性显然是 Go 语言最强有力的部分,不仅支持了日益重要的多核与多处理器计算机,也弥补了现存编程语言在这方面所存在的不足。

二、Go适用场景

Go 语言从设计之初就是为了应对高性能分布式领域的问题,在面对复杂事件处理上,Go 语言无疑比大多数其它语言有着更高的开发效率。现如今Go语言在云计算边缘计算大数据微服务物联网高并发领域应用得越来越广泛。

服务器端编程

作为21世纪的C语言,之前C或者C++做的事情,用Go来做都很合适,例如处理日志、数据打包、虚拟机处理、文件系统等方面

网络编程

网络编程这一块目前应用最广,包括Web应用、API应用、下载应用,而且Go内置的net/http包基本上把我们平常用到的网络功能都实现了,Go的生态起步较晚,但是发展速度是非常快的,而且Go的主流Web开发框架也有很多,比如 gin、beego、iris 等等。

微服务

微服务是一种软件开发技术,属于 SOA(面向服务的架构)的一种形式。它的作用是,将应用程序构建为许多松耦合的服务的集合。与其他语言相比,Go有很多优势,用 Go 编写的程序更加健壮,它们能够承受程序使用运行的服务构建的繁重负载,微服务架构的用处大部分体现在当程序需要伸缩(scalable)时,Go继承自 C-family 编程语言,用 Go 编写的组件更容易与同一家族中其他语言编写的组件相结合。

云平台

基于Go语言的云平台组件开发,例如:Docker/k8s等,以及云原生服务的开发,云服务很多都是采用Go进行开发,比如国内著名的七牛云是全站采用Go开发,还有如盛大CDN、阿里云CDN,华为云等。

分布式系统

可用于分布式计算、分布式存储、分布式读写等场景开发,例如分布式调度框架,分布式文件系统等

嵌入式应用开发

由于其占用资源较少、跨平台、高效率等优势,且其高效编译、高效执行、易于编程的特点,把Go语言作为嵌入应用开发语言大厂越来越多

三、Go的经典项目

Docker: 一种操作系统层面的虚拟化技术,可以在操作系统和应用程序之间进行隔离,也可以称之为容器。Docker 可以在一台物理服务器上快速运行一个或多个实例。例如,启动一个 CentOS 操作系统,并在其内部命令行执行指令后结束,整个过程就像自己在操作系统一样高效
Kubernetes: Google 公司开发的构建于 Docker 之上的容器调度服务,用户可以通过 Kubernetes 集群进行云端容器集群管理。系统会自动选取合适的工作节点来执行具体的容器集群调度处理工作。其核心概念是 Container Pod(容器仓)。
Hertz: 字节跳动服务框架团队研发的超大规模的企业级微服务 HTTP 框架,具有高易用性、易扩展、低时延等特点
Kitex: Kitex 字节跳动内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的特点
Nsq: 由Go语言开发的高性能、高可用消息队列系统
Skynet: 分布式调度框架
Doozer: 分布式同步工具,类似ZooKeeper
Heka: mazila开源的日志处理系统
Cbfs: couchbase开源的分布式文件系统

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寅贝勒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值