做设计在哪个网站找图片,做ppt的网站有哪些内容,商城网站jq楼层响应,安徽网站关键词优化排名前言
Go 语言是当下最为流行的编程语言之一#xff0c;大约在 2020、2021 年左右开始于国内盛行#xff0c;许多大厂很早就将部分 Java 项目迁移到了 Go#xff0c;足可看出其在性能方面的优越性。
相信各位都知道#xff0c;在爬虫业务中#xff0c;并发是一个关键的需…
前言
Go 语言是当下最为流行的编程语言之一大约在 2020、2021 年左右开始于国内盛行许多大厂很早就将部分 Java 项目迁移到了 Go足可看出其在性能方面的优越性。
相信各位都知道在爬虫业务中并发是一个关键的需求不然仅靠单线程采集数据只怕公司垮了数据都还没采完。以往编写爬虫脚本通常会使用 Python 语言不过想用 Python 实现较好的并发性能相对麻烦并且容易受到服务器或电脑配置的影响。相较之下Go 语言天然的支持轻量级线程goroutine和通道channel这使得并发编程变得非常简单也更为稳定。比之 PythonGo 还有很多优势并且时至今日各开源社区的大佬们也贡献了许多优秀的 Go 语言爬虫库及框架例如 colly、goquery、requests-go 等等相关生态越来越好。
现在很多公司要求使用 Go 语言编写爬虫脚本以往的 Python 程序也会逐步迁移。Boss 直聘上在一些公司爬虫岗的职位描述里也要求能够熟练使用 Go 语言 由此看来Go 语言正在逐步成为日常工具被广泛运用于后端开发和爬虫中所以学习 Go 语言是很有必要的无论目前是否是刚需都值得储备相关知识。
为此K哥新开《Go 语言入门专栏》提供给大伙一个新的学习途径。
简介
Go 语言也称为 Golang是一种由 Google 开发的开源编程语言。
过去许多开发者在使用 C 来开发大型的服务端软件时由于二进制文件一般都非常大需要耗费大量的时间在编译文件上同时编程语言的设计思想也已经非常陈旧这些情况都充分表明了现有的编程语言已不符合时下的生产环境。
学者们坐下来总结出了现在生产环境与软件开发之间的主要矛盾并尝试设计一门全新的编程语言来解决这些问题。他们讨论得出的对编程语言的设计要求
能够以更快的速度开发软件开发出的软件能够很好地在现代的多核计算机上工作开发出的软件能够很好地在网络环境下工作使人们能够享受软件开发的过程
Go 语言就在这样的环境下诞生了它的主要目标是“兼具 Python 等动态语言的开发速度和 C/C 等编译型语言的性能与安全性”。
Go 语言出现的目的是在编程领域中创造出最实用的方式来进行软件开发。它并不是要用奇怪的语法或晦涩难懂的概念来从根本上推翻已有的编程语言而是重建并改善了 C、C#、Java 中的许多语法风格。
起源
Go 语言的起源可以追溯到 2007 年。
在 2007 年的时候谷歌开发工作的规模与正在部署的生产系统规模暴增需要有个好的解决方案应对这些挑战。
当时 Robert Griesemer、Rob Pike 和 Ken Thompson 都是用的 C编译一个分布式集群大概要花费 45 分钟这个过程让三个人都很难以忍受。 2007 年 9 月 20 日星期四下午在等待编译的时候 Rob Pike 把 Robert Griesemer 和 Ken Thompson 喊到一起决定要做些什么他们不想永远使用 C并且想要很好处理并发的问题。希望创造一个能够摒弃其他语言的缺点的新语言保持静态类型和运行时效率、具有可读性和可用性、具备高性能网络和并发处理。
Go 这个名字是 Rob Pike 取的认为它很短、易于输入非常合适这一新语言的特性。
最初的一周内他们就讨论出来了很多 Go 语言的风格和特性并着手开发。
经过两年的努力于 2009 年 11 月Google 宣布了 Go 语言的首个公开发布版本即 Go 1。
大佬三连坐 顶级初创团队 ① Robert Griesemer参与开发 Java HotSpot 虚拟机并负责 Chrome 浏览器和 Node.js 使用的 Google V8 JavaScript 引擎的代码生成部分。 ② Rob PikeGo 语言项目总负责人贝尔实验室 Unix 团队成员参与的项目包括 Plan 9Inferno 操作系统和 Limbo 编程语言。 ③ Ken Thompson贝尔实验室 Unix 团队成员C 语言、Unix 和 Plan 9 的创始人之一与 Rob Pike 共同开发了 UTF-8 字符集规范。 随着更多有才华的程序员加入到 Go 开发团队中更多贡献者开始为 Go 语言项目添砖加瓦。使得 Go 在发布的当年就成为了著名编程语言排行榜 TIOBE 的年度最佳编程语言。
Go 发布后就吸引了一些公司尤其是云计算领域的初创公司成为了 Go 语言的早期接纳者。在经过若干年的磨合后在这些公司中诞生了不乏像 Docker容器引擎、Kubernetes云原生事实标准平台、Ethereum区块链公链以太坊等“杀手级”或示范性项目这些项目也让 Go 被誉为云计算基础设施新兴语言或直接称为云计算语言。
Go 在近些年云原生领域的广泛应用也让其跻身云原生时代的头部编程语言。
Logo 的诞生
在 Go 立项的时候Rob Pike 的妻子 Renee French著名美国插画师、漫画家和作家以其独特的风格和奇特的创意而闻名就帮他们画了一个标志然后这个图标就出现在 Google Code 网站和第一件 Go T 恤上该 Logo 被用来体现 Go 的速度 2009 年 11 月 10 日 Go 准备开源发布的之前Rob Pike 的妻子建议将她在 1999 年左右为新泽西州 WFMU 广播电台年度筹款活动设计的作为宣传的形象改编成为 Go 的吉祥物 ------ Gopher地鼠 发错了是这个 ~(▽) 之后Rob Pike 的妻子又绘制了更多的 Go gopher 形象代表着 Go 项目和各地的 Go 程序员。这些可爱的形象成为 Go 世界中最受欢迎的事物之一被世界各地的 Go 程序员广泛使用 发展历程 初期版本2009 年 - 2012 年 初期版本的 Go 语言主要集中于提供简洁、高效的编程体验以及强大的并发支持。这些特性使其成为了云服务、网络应用和大规模分布式系统开发的理想选择。 Go 1 发布2012 年 Go 1 是 Go 语言的首个稳定版本也是第一个被广泛用于生产环境的版本。发布 Go 1 的目标是提供稳定的 API 和 ABI以便未来版本的兼容性。 生态系统的发展2012 年 - 至今 随着 Go 语言的发展其生态系统也在不断壮大。包括标准库、第三方库、框架以及工具链在内的生态系统都得到了极大的丰富和改进使得 Go 语言更加适用于各种类型的应用开发。 Go 语言在工业界的应用2010 年至今 自从 Go 语言发布以来越来越多的公司和组织开始采用 Go 语言进行开发。一些知名的公司如 Google、Uber、Dropbox、Docker、Cloudflare、MongoDB 等都在生产环境中使用 Go 语言开发核心系统。 版本更新和改进2012 年至今 Go 语言的开发团队持续不断地发布新的版本以改进语言的性能、稳定性和功能。Go 社区也积极参与到语言的发展中提出改进建议、修复 bug并贡献各种开源项目。 版本迭代 官方发布历史https://go.dev/doc/devel/release
特性
① 简洁易学
Go 语言的语法设计简洁明了摒弃了一些繁琐的特性和语法元素使得代码更易于阅读和维护。这使得 Go 语言成为一门学习曲线较为平缓的编程语言即使是没有编程经验的人也能相对轻松地上手。
② 高并发性能
Go 语言天生支持并发编程通过 goroutine 和 channel 机制使得并发编程变得非常简单。
传统编程语言如 C、C 等的并发实现实际上就是基于操作系统调度的即程序负责创建线程一般通过 pthread 等函数库调用实现操作系统负责调度。这种传统支持并发的方式主要有两大不足复杂与难于扩展。
为了解决这些问题Go 果断放弃了传统的基于操作系统线程的并发模型而采用了用户层轻量级线程或者说是类协程(coroutine)Go 将之称为 goroutine。
goroutine 占用的资源非常少Go 语言运行时默认为每个 goroutine 分配的栈空间仅 2KB会自动在配置的一组逻辑处理器上调度执行 goroutine。每个逻辑处理器绑定到一个操作系统线程上。这让用户的应用程序执行效率更高而开发工作量显著减少。
goroutine 调度的切换也不用陷入trap操作系统内核层完成代价很低。因此在一个 Go 程序中可以创建成千上万个并发的 goroutine。所有的 Go 代码都在 goroutine 中执行哪怕是 Go 的运行时代码也不例外。
而 channel通道则提供了不同 goroutine 之间的通信和同步机制使得编写并发代码变得直观而安全可以帮助用户避免在其他语言里常见的共享内存访问的问题。
③ 快速编译
Go 语言的编译速度非常快这得益于其先进的编译器和优化器。快速的编译速度可以大大提高开发效率特别是在大型项目中。
④ 内存管理
Go 语言拥有自动内存管理功能也就是垃圾回收机制。这意味着开发者不需要手动管理内存分配和回收大大减轻了编程的负担同时也有助于防止内存泄漏。
⑤ 静态类型语言
Go 语言是一门静态类型的编程语言这意味着在编译期间就能捕获到一些类型相关的错误。静态类型检查有助于提前发现潜在的 Bug减少在运行时可能出现的错误。
⑥ 跨平台支持
Go 语言的编译器可以在多种平台上运行可以轻松地将 Go 程序编译成适用于不同操作系统和硬件架构的可执行文件。这使得 Go 语言成为跨平台开发的理想选择。
⑦ 强调并遵循软件工程原则
Go 语言鼓励开发者编写清晰、简洁、可维护的代码。它有一套明确的代码风格规范并自带了一些工具来帮助开发者保持一致的代码风格。
⑧ 丰富的标准库
Go 语言附带了丰富而强大的标准库覆盖了网络、文件处理、加密、并发等方面。开发者可以直接使用标准库提供的功能而无需引入大量的第三方库。
⑨ 工具链
完整的工具链对于日常开发极为重要。Go 在此做得相当不错无论是编译、格式化、错误检查、帮助文档还是第三方包下载、更新都有对应的工具。其功能未必完善但起码算得上简单易用。
内置完整测试框架其中包括单元测试、性能测试、代码覆盖率、数据竞争以及用来调优的 pprof这些都是保障代码能正确而稳定运行的必备利器。
除此之外还可通过环境变量输出运行时监控信息尤其是垃圾回收和并发调度跟踪可进一步帮助我们改进算法获得更佳的运行期表现。
⑩ 文档资源
Go 语言拥有丰富的官方文档资源包括语言规范、标准库文档、命令行工具说明等。此外Go 语言社区中也有许多优秀的教程、博客和论坛为开发者提供了学习和交流的平台。 性能测评
以下是 Go 语言与其他编程语言的对比测试数据源于网络资料
在相同的环境和执行目标的情况下Go 程序比 Java 或 Scala 应用程序要快上 2 倍并比这两门语言使用少占用 70% 的内存执行效率大约比 C 慢 20%Go 的编译速度要比绝大多数语言都要快比 Java 和 C 快 5 至 6 倍比 Scala 快 10 倍Go 语言通过垃圾回收器自动管理内存这在某些情况下可能会引入一些运行时开销。相比之下C/C 需要手动管理内存这可能会导致内存泄漏和悬挂指针等问题Go 和 Python 在一般开发的平均水平测试中Go 要比 Python 3 快 25 倍左右少占用三分之二的内存但比 Python 大概多写一倍的代码毫无疑问开发效率上Python 是要技高一筹的比较 Go 和 Python 在简单的 web 服务器方面的性能单位为传输量每秒 原生的 Go net/http 包要比 web.py 快 7 至 8 倍如果使用 web.go 框架则稍微差点比 web.py 快 6 至 7 倍。如果是使用Python 中的 tornado 异步服务器和框架开发出的Web应用那么要比传统的 web.py 快很多此时Go 大概只比它快 1.2 至 1.5 倍Go 在 Web 开发的领域比 Python 要快但目前来看并非碾压态势。 业务方向 网络编程 Go 语言原生支持高效的并发编程因此非常适合用于构建网络应用程序和分布式系统。 大数据处理 Go 语言具有高效的执行性能和并发处理能力因此很适合用于处理大量数据。 云原生开发 随着云原生应用的兴起Go 语言也成为云原生开发的热门选择。Go 的快速启动时间、小内存占用和高并发性能使其非常适合在云环境中构建轻量级容器化应用和无服务器函数。 微服务 Go 语言对于构建微服务和 API 很有优势因为它的代码结构简单易于维护同时具有高效和高并发特性 数据库和存储系统 Go 语言提供了丰富的数据库和存储库包括 SQL 数据库如 MySQL、PostgreSQL、NoSQL 数据库如 MongoDB、Redis以及分布式存储系统如 etcd。这使得 Go 成为开发高性能、可扩展和可靠的数据存储解决方案的理想语言。 Web 开发 Go 语言拥有轻量级的 HTTP 服务器使其成为构建高性能 Web 应用程序的理想选择。它支持快速开发和部署并且具有良好的性能和可靠性。很多人使用 Golang 是因为它非常快而且它可以用来并行运行进程这样他们就不必互相等待。 它内置了对并发的支持并促进了单个进程中线程和处理器之间的并行性。这可以使你的网站更容易快速加载并为你提供最佳的用户体验。 区块链开发 Go 语言在区块链开发领域也得到了广泛应用。许多知名的区块链项目如 Ethereum使用 Go 语言作为其主要开发语言因为 Go 具有高效的并发能力和良好的性能适合处理区块链交易和智能合约。
来自 Go 语言之父的忠告
Rob Pike 今年已经 68 岁了大部分时候在澳大利亚生活现在居住在悉尼新南威尔士州。
在最近的一次采访中他总结了自己 40 多年开发经验说避免倦怠的最好方法是在支持你的环境中做你真正喜欢的事情。他认为自己是幸运的在贝尔实验室和谷歌都是如此。
同时他也提醒我们如果对工作感到压力应该随时休息或者改变方向。
参考资料推荐 Go 官方文档https://go.dev/doc/ Go 技术论坛https://learnku.com/docs/the-way-to-go Go 语言简明教程https://geektutu.com/post/quick-golang.html Go 语言中文网https://studygolang.com/ C 语言中文网https://c.biancheng.net/golang/intro/ 维基百科https://en.wikipedia.org/wiki/Go_(programming_language) 菜鸟教程https://www.runoob.com/go/go-tutorial.html 下期预告《【Go 语言入门专栏】Go 安装与环境配置》