Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Go语言初窥

Go语言初窥

作者头像
sparkle123
发布于 2021-01-26 06:47:56
发布于 2021-01-26 06:47:56
51500
代码可运行
举报
运行总次数:0
代码可运行

资源消耗少

Go与C/C++消耗的CPU差距不大,但由于Go是垃圾回收型语言,耗费的内存会多一些。 拿Go与同为垃圾回收型语言的Java简单比较一下。

Java当年诞生时最大的卖点之一是“一次编写,到处运行”。这个特性在20年前很棒,因为市场上几乎没有虚拟化解决方案。但是到了今天出现了Docker之类一系列跨平台工具,这种卖点可能被看做一种短板,主要原因如下:

  • Java需要启动JVM进程来运行中间代码,程序需要预热
  • 堆内存较大时,垃圾回收器需要进行深入调优,但在一些对实时性要求高的场景下,可能无解,Full GC一触发就是灾难
  • JDK体积庞大, Spring Boot jar包体积大,在微服务架构下问题最突出
  • Spring全家桶越来越重,导致使用全家桶的应用,性能较差

抛去JVM启动和预热时间,运行一个最简单的HTTP程序,与Go对比,Java在CPU上的消耗多约20%,内存上的消耗约高两个数量级。

为并发IO而生

开发过网络库的同学可能都知道Unixepoll调用,如果了解Windows应该听说过IOCP,这两种接口分别对应网络的Reactor和Proactor模式。

简单来说,前者是同步的事件驱动模型,后者是异步IO。不论使用任何语言只要涉及到高性能并发IO都逃不过这两种模式开发的折磨——除了Go

一般来说一个服务进程包含main、日志、网络、其他外部依赖库线程,以及核心的服务处理(计算)线程,其中服务线程可能会按CPU核数配置开启多个。

go创建的goroutine相当于将IO读写和事件触发拼接起来的一个容器,消耗的内存非常小,所有goroutine被Go自动调度到有限个数的线程中,运行中切换基本是使用epoll的事件机制,因此这种协程机制可以很迅速启动成千上万个而不太消耗性能。

工具集统一

Go作为工程语言而设计,即使一个团队有多种风格的开发者,他们的流程和产出最终都需要尽量保持一致,这样协同开发效率才会高。为了保证各方面的统一,Go提供了多种工具,安装以后执行go命令就能直接使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go run:直接运行go代码文件

go build:编译到本目录

go install:编译并安装到统一目录,比build快

go fmt:格式化代码,写完代码一定要记得用

go get:下载并安装包和依赖库

go mod:包管理,1.11版加入

go test:运行单元测试

go doc:将代码注释输出成文档

go tool:实用工具集,包括静态错误检查、测试覆盖率、性能分析、生成汇编等等

运维性好

Go是一种适应分布式系统和云服务的语言,所以它直接将静态编译作为默认选项,也就是说编译之后只要将可执行文件扔到服务器上或者容器里就能没有任何延迟地运行起来,不需要任何外部依赖库。 Go的项目只要在编译时修改参数,就能交叉编译出其他任意支持平台所需的二进制文件。比如在macOS上开发,当需要在linux服务器上测试则使用如下命令编译:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GOOS=linux GOARCH=amd64 go build ./...
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
nodejs php go语言了解
1、Nodejs 1) 简单的说 Node.js 就是运行在服务端的 JavaScript。 2) Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 3) Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。 4) 我们写下的js代码,是在单线程的环境中执行,但nodejs本身不是单线程的。如果我们在代码中调用了nodejs提供的异步api(如IO等),它们可能是通过底层的
李海彬
2018/03/21
1.9K0
01 . Go语言简介及语言特征
对语言进行评估时,明白设计者的动机以及语言要解决的问题很重要。Go语言出自 Ken Thompson 和 Rob Pike、Robert Griesemer 之手,他们都是计算机科学领域的重量级人物。
iginkgo18
2020/09/27
2.5K0
01 .  Go语言简介及语言特征
Google用Go语言解决现代计算难题
计算机一直在演化,但是编程语言并没有以同样的速度演化。现在的手 机,内置的CPU核数可能都多于我们使用的第一台电脑。高性能服务器拥有 64核、128核,甚至更多核。但是我们依旧在使用为单核设计的技术在编程。 编程的技术同样在演化。大部分程序不再由单个开发者来完成,而是由处 于不同时区、不同时间段工作的一组人来完成。大项目被分解为小项目,指派 给不同的程序员,程序员开发完成后,再以可以在各个应用程序中交叉使用的 库或者包的形式,提交给整个团队。 如今的程序员和公司比以往更加信任开源软件的力量。Go是一门开源的
企鹅号小编
2018/01/12
1.2K0
Go语言学习之旅 1 - 简介
语法简单 并发模型 Goroutine 是 Go 最显著的特征。它用类协程的方式来处理并发单元 并发编程变得极为容易,无须处理回调,无须关注线程切换,仅一个关键字,简单而自然。 搭配 channel,将并发单元间的数据耦合拆解开来,这对所有纠结于内存共享、锁粒度的开发人员都是一个可期盼的解脱 内存分配 垃圾回收 静态链接 将运行时、依赖库直接打包到可执行文件内部 标准库 其中值得称道的是 net/http,仅须简单几条语句就能实现一个高性能 Web Server, 工具链
张云飞Vir
2020/03/16
3750
Go语言简介&开发环境配置
Go (又称GoLang)是一款比较年轻的开源编程语言,它是从2007年末由来自谷歌的Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来又加入了后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源。现在Go语言拥有活跃的开发社区和开发人员,国内的一些大公司(字节、快手、B站)也纷纷开始转向基于Go的后端开发。
Steve Wang
2020/12/21
8760
Go语言简介&开发环境配置
Go语言入门
在编程语言的江湖中,Go(Golang)的崛起堪称传奇——诞生仅十余年,却已成为云计算、微服务、高并发领域的「事实标准」。从Docker到Kubernetes,从Etcd到TiDB,Go的身影遍布现代基础设施的核心场景。它既非C/C++的性能王者,亦非Python的胶水语言,却以「简单、高效、可维护」的设计哲学,重新定义了「工程级语言」的标准。
小文要打代码
2025/07/10
1400
【GoLang#1】:Go 语言概述(背景 | 环境配置 | 特点 | 学习)
诞生背景(2007年):Go 语言由 Google 的三位工程师 Robert Griesemer 、Rob Pike 和 Ken Thompson 于 2007 年开始设计开发。
IsLand1314
2025/08/08
1480
【GoLang#1】:Go 语言概述(背景 | 环境配置 | 特点 | 学习)
论golang是世界上最好的语言
概述 golang is a better C and a simple C++ golang主要特性 1、语法简单 舍弃语法糖,严格控制关键字 C++语法糖之多,令人发指,而C又太过于底层,容易出现自己造轮子的情况,如何在两者之间取舍,是每一个转向golang的工程师曾经思考过的问题。 golang的出现,就是在C和C++之间的刚刚好的取舍。 2、垃圾回收 golang支持垃圾回收,相比C/C++是一大进步。 c + +由于存在指针计算,即p++、p--等,无法提供垃圾回收功能,而golang虽然有指针,
李海彬
2018/03/28
1.7K0
如何用Go实现一个异步网络库?
导语 | 在需要高性能、节省资源的场景下,比如海量的连接、很高的并发,我们发现Go开始变得吃力,不但内存开销大,而且还会有频繁的goroutine调度。GC时间也变得越来越长,甚至还会把系统搞挂。这时,我们就可以考虑用Go构建经典的Reactor网络模型,来应对这种场景。 一、常见的服务端网络编程模型 在具体讲Reactor网络库的实现前,我们先快速回顾下常见的服务端网络编程模型。 服务端网络编程主要解决两个问题,一个是服务端如何管理连接,特别是海量连接、高并发连接(经典的c10k/c100k问题),二是服
腾讯云开发者
2022/07/20
6730
如何用Go实现一个异步网络库?
Go 语言的前生今世与介绍
Go 语言的创始人有三位,分别是图灵奖获得者、C 语法联合发明人、Unix 之父肯·汤普森(Ken Thompson),Plan 9 操作系统领导者、UTF-8 编码的最初设计者罗伯·派克(Rob Pike),以及 Java 的 HotSpot 虚拟机和 Chrome 浏览器的 JavaScript V8 引擎的设计者之一罗伯特·格瑞史莫(Robert Griesemer)。
贾维斯Echo
2023/10/18
1.5K0
Go 语言的前生今世与介绍
Go语言的一些使用心得
起初一直使用的Python,到了18年下半年由于业务需求而接触了Golang,从开始学习到现在的快半年里,也用Golang写了些代码,公司产品和业余写的都有,今天就写点Golang相关的总结或者感想吧。
程序员同行者
2019/04/19
7460
不是语言之争--Go vs Erlang
因为 云巴 系统对高并发、低延迟的需求,我们对各个语言、平台做了很多的调研比较工作。这自然就包括致力于开发高并发应用的 Go 和 Erlang。 并发 Go 对高并发的支持通过 goroutine 实现。goroutine 可以理解为轻量级的 线程(thread)。同一个 Go 应用创建的 goroutine 共享地址空间。 Erlang 的高并发通过轻量级 进程(process)实现,每一个进程都有独立的状态记录。 另外,使用 goroutine 要注意,goroutine 运行完毕后,占用的内存放回内存
李海彬
2018/03/21
3.1K0
第4节 Go语言的核心特性
Go 编程语言是一个开源项目,它使程序员更具生产力。Go 语言具有很强的表达能力,它简洁、清晰而高效。得益于其并发机制, 用它编写的程序能够非常有效地利用多核与联网的计算机,其新颖的类型系统则使程序结构变得灵活而模块化。 Go 代码编译成机器码不仅非常迅速,还具有方便的垃圾收集机制和强大的运行时反射机制。 它是一个快速的、静态类型的编译型语言,感觉却像动态类型的解释型语言。(摘取自官网)
小尘哥
2019/05/28
8640
go语言最全优化技巧总结,值得收藏!
导语 | 本文总结了在维护go基础库过程中,用到或者见到的一些性能优化技巧,现将一些理解梳理撰写成文,和大家探讨。 一、常规手段 (一)sync.Pool 临时对象池应该是对可读性影响最小且优化效果显著的手段。基本上,业内以高性能著称的开源库,都会使用到。 最典型的就是fasthttp(网址:https://github.com/valyala/fasthttp/)了,它几乎把所有的对象都用sync.Pool维护。 但这样的复用不一定全是合理的。比如在fasthttp中,传递上下文相关信息的Requ
腾讯云开发者
2021/08/24
8770
[GO专栏-2]Go语言的设计哲学
所谓大道至简,就是这个道理,语言终归只是个工具,能用简单的方式处理问题为什么要复杂起来呢?
苏州程序大白
2022/04/13
8350
[GO专栏-2]Go语言的设计哲学
Go语言的runtime包深入解析
Go语言的runtime包是Go标准库中非常重要的一部分,它包含了与Go运行时系统(包括内存分配、垃圾回收、并发调度等)相关的底层函数和数据结构。理解runtime包的工作机制,有助于开发者更好地优化Go应用程序的性能。
二一年冬末
2024/07/01
6930
Go语言设计哲学
关于Go语言的设计哲学,Go语言之父们以及Go开发团队并没有给出明确的官方说法。以下为个人从他们及Go社区主流观点的代码行为整理、分析和总结,列出4条Go语言的设计哲学。理解这些设计哲学对形成Go原生编程思维、编写高质量Go代码起到积极作用。
用户9731252
2024/08/12
1760
五分钟技术小分享 - 2022Week11
Go的源码会被编译成二进制文件,然后直接在对应的操作系统上运行。那么,这对学习GC有什么意义呢?让我们一起看看今天的内容。
junedayday
2022/03/29
3480
五分钟技术小分享 - 2022Week11
字节跳动的 Go 语言面试会问哪些问题?
这个一般分为两个层次,初中级开发(1-1、1-2)和高级开发(2-1、2-2),不同级别的面试一般要求是不一样的。对于初中级开发,一般会问一些语言层面的东西,一些常用的基础原理和一些算法,但是高级开发就没那么简单了。下面我为读者分享一段面试的经历。
肉眼品世界
2020/11/11
3.5K0
Java 微服务能像 Go 一样快吗?
作者 | Mark Nelson、Peter Nagy 策划 | 田晓旭 Peter Nagy 和我在 2020 年 8 月的甲骨文 Groundbreakers Tour 2020 LATAM 大会上发表一篇论文,题为《Go Java, Go!》。我们在本文中提出一个问题:“Java 微服务能像 Go 一样快吗?”为此,我们创建了一系列微服务并进行了基准测试,并在会议上展示了我们的成果。但其中还有不少可以探索的空间,因此我们决定将在本文中进一步探讨。 1背景介绍 我们希望通过实验了解 Java 微服务在运
深度学习与Python
2023/04/01
6790
Java 微服务能像 Go 一样快吗?
相关推荐
nodejs php go语言了解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档