UTC:修订间差异
→空修订问题上报: 回复 |
TeodoroSeccombe(留言 | 贡献) 小 创建页面,内容为“。” |
||
| 第1行: | 第1行: | ||
{{ | {{Infobox | ||
| 标题 = Go | |||
| 内容 = | |||
{{!}}- | {{!}}- | ||
! | ! 其他名称 | ||
{{!}} | {{!}} Golang | ||
{{!}}- | {{!}}- | ||
! | ! 类型 | ||
{{!}} | {{!}} 静态类型、编译型编程语言 | ||
{{!}}- | {{!}}- | ||
! | ! 设计者 | ||
{{!}} | {{!}} Robert Griesemer、Rob Pike、Ken Thompson | ||
{{!}}- | {{!}}- | ||
! | ! 开发机构 | ||
{{!}} | {{!}} Google | ||
{{!}}- | {{!}}- | ||
! | ! 设计时间 | ||
{{!}} | {{!}} 2007年 | ||
{{!}}- | {{!}}- | ||
! | ! 首次发布 | ||
{{!}} | {{!}} 2009年11月 | ||
{{!}}- | |||
! 稳定版本 | |||
{{!}} Go 1.x(持续更新) | |||
{{!}}- | |||
! 编程范式 | |||
{{!}} 命令式、并发、结构化 | |||
{{!}}- | |||
! 许可证 | |||
{{!}} BSD | |||
{{!}}- | |||
! 官方网站 | |||
{{!}} https://go.dev | |||
}} | |||
'''Go'''(常称'''Golang''')是一种由[[Google]]开发的静态类型、编译型[[编程]]语言,由Robert Griesemer、Rob Pike和Ken Thompson于2007年设计,2009年11月正式开源发布。<ref name=":0">[https://go.googlesource.com/go go - Git at Google]</ref><ref name=":1">[https://www.ebsco.com/research-starters/language-and-linguistics/go-programming-language Go (programming language) - EBSCO]</ref> 其设计目标是在保持[[C语言]]级别执行效率的同时,提供内存安全、垃圾回收、结构类型及CSP风格的并发编程能力,并兼具动态语言如[[Python]]的开发效率与可读性。<ref name=":1" /><ref name=":2">[https://github.com/ababyprogrammer/Go-by-example GitHub - ababyprogrammer/Go-by-example]</ref> Go语言以简洁的语法、原生的并发支持、快速的编译速度及丰富的标准库著称,现已成为云原生基础设施、分布式系统、网络服务及容器技术领域的主流开发语言之一。<ref name=":3">[https://www.bytesizego.com/blog/go-language-history The Evolution of the Go Programming Language - ByteSizeGo]</ref> | |||
== 历史 == | |||
2007年9月,Google工程师Rob Pike在等候一个[[C++]]项目构建期间,与同一办公室的Robert Griesemer及Ken Thompson展开了一场关于设计新[[编程语言]]的讨论。<ref name=":4">[https://blog.csdn.net/weixin_46931877/article/details/122403722 Go语言的前生今世 - CSDN博客]</ref> 三位设计者均来自贝尔实验室,拥有深厚的系统编程背景:Ken Thompson是[[Unix]][[操作系统]]与B语言的创造者,Rob Pike是UTF-8编码的联合设计者,Robert Griesemer曾师从Pascal语言之父Niklaus Wirth。<ref name=":2" /><ref name=":5">[https://github.com/josephsmartinez/go_programming GitHub - josephsmartinez/go_programming]</ref> | |||
设计团队对当时Google内部广泛使用的C++语言在复杂性、编译速度及并发支持方面的不足深感不满,希望创造一门能够匹配多核处理器与网络化环境的现代系统编程语言。<ref name=":6">[https://cacm.acm.org/research/the-go-programming-language-and-environment/ The Go Programming Language and Environment - Communications of the ACM]</ref> 2007年9月25日,Rob Pike在一封回复邮件中将这门新语言命名为"Go"。<ref name=":4" /> | |||
2008年中期,语言的大部分特性设计完成,Russ Cox作为主力开发者加入项目,着手实现编译器与运行时。<ref name=":7">[https://juejin.cn/post/6844903925460500488 Go语言追根溯源 - 掘金]</ref> 2009年11月,Go语言正式对外公布并开源。2012年3月28日,Go 1.0发布,承诺Go 1.x系列将保持向后兼容。<ref name=":8">[https://go.dev/doc/devel/release Release History - go.dev]</ref> | |||
2015年发布的Go 1.5实现了自举,编译器与运行时全部使用Go重写,彻底移除了原有的C代码实现。<ref name=":9">[https://juejin.cn/post/7377581109155102747 GO语言精进之路学习笔记 - 掘金]</ref> 2018年,Go 1.11引入了Go module机制,提供了原生的依赖管理系统,取代了此前依赖GOPATH及第三方工具的方案。<ref name=":3" /> | |||
== | == 技术特性 == | ||
=== 并发模型 === | |||
== | Go语言的并发编程模型基于Tony Hoare于1978年提出的通信顺序进程(CSP)理论。<ref name=":1" /><ref name=":7" /> 该模型通过轻量级的执行单元goroutine与用于goroutine间通信的channel实现并发,而非依赖传统的操作系统线程与共享内存加锁机制。<ref name=":10">[https://blog.stackademic.com/fundamentals-of-go-concurrency-garbage-collection-and-memory-management-3aafec50dfaf Fundamentals of Go: Concurrency, Generics, Garbage Collection - Stackademic]</ref> Goroutine由Go运行时调度器管理,初始栈大小仅为2KB,可在单个进程中创建成千上万个实例,切换开销远低于操作系统线程。<ref name=":9" /> | ||
=== | === 类型系统与内存管理 === | ||
= | Go为静态类型语言,类型检查在编译时完成,支持结构类型与接口隐式实现。<ref name=":1" /> 语言内置垃圾回收器,自动管理内存分配与回收,减轻了开发者的内存管理负担。<ref name=":10" /> Go不提供传统意义上的类与继承,而是通过结构体与组合实现代码复用。 | ||
=== 编译与工具链 === | |||
= | Go编译器可快速生成本地机器码,编译速度显著快于C++等语言。<ref name=":1" /> 标准工具链包含go fmt(自动代码格式化)、go test(单元测试)、go build(编译)及go mod(依赖管理)等工具,形成了完整的开发工作流。<ref name=":10" /> Go支持[[跨平台]]编译,可在单一平台上为不同操作系统与处理器[[架构]]生成可执行文件。 | ||
=== 标准库 === | |||
Go拥有丰富的标准库,涵盖网络编程(net/http)、加密(crypto)、压缩(compress/gzip)、[[数据]]库访问(database/sql)及容器(container/heap、container/list)等领域,使开发者在不依赖大量第三方包的情况下即可构建完整应用。<ref name=":11">[https://github.com/0xIntelTech/interview-QA/blob/main/golang.md interview-QA/golang.md - GitHub]</ref> | |||
== 主要实现 == | |||
Go语言存在多个编译器实现。Google官方维护的gc编译器工具链是自举实现,支持多种操作系统与[[Web]]Assembly目标平台。<ref name=":2" /> gccgo是GCC的前端实现,利用GCC的优化后端生成代码。Gollvm则是基于LLVM的Go编译器前端。<ref name=":2" /> 此外,Gopher[[Js|JS]]等第三方工具可将Go代码编译为[[Java]]Script,用于前端Web开发。 | |||
== 应用领域 == | |||
Go语言在云计算与基础设施领域占据重要地位。[[Docker]]容器引擎、Kubernetes容器编排系统、Terraform基础设施即代码工具及Prometheus监控系统均使用Go语言编写。<ref name=":12">[https://juejin.cn/post/7443047654076923930 十分钟带你入门Go语言(Golang)开发 - 掘金]</ref> 其简洁性、高并发能力与快速启动特性使其特别适合微服务架构、网络[[服务器]]、API网关及分布式系统的开发。<ref name=":13">[https://www.djamware.com/post/695e610801f4c23f861aa821/go-in-the-cloud-deploying-microservices-with-docker-kubernetes-go Go in the Cloud: Deploying Microservices with Docker, Kubernetes & Go - Djamware]</ref> | |||
== 文化 == | |||
Go的官方吉祥物是一只名为Gopher的地鼠,由艺术家Renée French于2009年设计。<ref name=":2" /> 2016年,Go项目发布了专为该语言设计的Go与Go Mono字体。<ref name=":2" /> 2018年,Go更新了官方标志,采用带有流线尾迹的风格化斜体"GO"字样,象征速度与效率。 | |||
== 参考文献 == | == 参考文献 == | ||
<references /> | <references /> | ||