Go 概述
Go - 概述
Section titled “Go - 概述”Go,通常被称为 Golang,是由 Robert Griesemer、Rob Pike 和 Ken Thompson 在 Google 设计的开源、静态类型、编译型编程语言。它于 2009 年首次公布,并于 2012 年发布了 1.0 版本。
Go 的设计目标是简洁、高效、可靠和生产力高。它旨在结合 Python 等动态语言的开发速度与 C++ 或 Java 等编译型语言的性能和安全性。它特别适合用于系统编程、云计算、Web 开发、命令行工具以及高并发应用。
主要设计原则与特性
Section titled “主要设计原则与特性”- 简洁性和可读性(Simplicity and Readability): Go 拥有简洁的语法和少量的关键字,使其相对容易学习和阅读。
- 并发性(Concurrency): 内置的对并发编程的支持,使用了轻量级的协程(goroutines)和通道(channels),使得编写能同时处理多个任务的程序变得容易。
- 快速编译(Fast Compilation): 编译器设计得非常快,从而缩短了构建时间。
- 静态类型和类型推断(Static Typing with Type Inference): 在编译时提供类型安全,但由于类型推断(例如
x := 10),通常允许省略显式类型声明。 - 垃圾回收(Garbage Collection): 自动内存管理简化了开发,因为它处理了内存的分配和释放。
- 丰富的标准库(Rich Standard Library): 提供了用于常见任务(如网络、输入/输出、字符串处理和密码学)的全面软件包集。
- 优秀的工具链(Excellent Tooling): 自带强大的工具,如
go fmt(代码格式化)、go test(测试)、go build(编译)、go doc(文档)和模块管理。 - 静态二进制文件(Static Binaries): 默认生成静态链接的可执行文件,这简化了部署,因为它们包含了所有必要的依赖项。
- 接口(Interfaces): 通过接口的隐式实现(结构化类型)提供了一种实现多态性的灵活方式。
有意排除的特性(历史上)
Section titled “有意排除的特性(历史上)”为了保持简洁性,Go 最初有意省略了其他语言中的一些特性。其中一些随着时间推移发生了变化:
- 没有传统的继承(No Traditional Inheritance): Go 更倾向于组合而非继承,使用结构体嵌入和接口。
- 没有方法或运算符重载(No Method or Operator Overloading): 每个函数/方法在其作用域内必须拥有唯一的名称;运算符不能被重新定义。
- 没有(直接的)指针算术(No Pointer Arithmetic): 虽然存在指针,但像 C 语言那样直接操作内存地址的做法是不被鼓励且受到限制的(主要通过
unsafe包提供)。 - 没有隐式类型转换(No Implicit Type Conversions): 类型之间的转换必须是显式的。
- 没有断言(No Assertions): 错误处理主要通过显式的错误值来完成。
- 没有循环依赖(No Circular Dependencies): 包的依赖关系必须形成一个有向无环图(DAG)。
没有泛型编程(No Generic Programming): 更新: Go 在 1.18 版本(2022 年发布)中添加了泛型(Generics),支持类型参数化的函数和类型。这是基于社区反馈的一项重要补充。
Go 源代码写在扩展名为 .go 的纯文本文件中(例如 myapp.go)。程序被组织成包(packages),这有助于管理代码结构和依赖关系。一个典型的项目可能包含分布在多个目录(包)中的多个 .go 文件。
本教程假设你对如何使用文本编辑器创建和修改源代码文件有基本的了解。