Go(也称为 Golang)是一种过程式和静态类型的编程语言,其语法类似于C语言。它提供了丰富的标准库、垃圾收集和动态类型功能。
这种语言还具有键值映射、长度数组特性,它们是高级内置类型。 Go 是用于创建 Web 应用程序、Web API、微服务和其他分布式服务的最强大、高性能和可扩展的编程语言。它是美国发展最快、收入最高的编程语言之一。
Golang的演变:
Golang 由Robert Griesemer、Rob Pike 和 Ken Thompson于 2007 年在 Google 设计。它于 2009 年 11 月作为开源编程语言推出。设计 Golang 的主要目的是通过保留其他语言的有用特性来解决其他语言的问题。 2012 年 3 月,其1.0 版发布。最新版本是 2018 年发布的1.11.1 。
为什么是 Golang?
设计 Golang 的主要目的是消除现有语言的问题。所以我们从Python、 Java、C/C++ 语言面临的问题开始:
- Python – “易于使用,但速度慢” : Python简单但速度慢,因为它是一种解释型语言,导致代码变慢。
- Java – “复杂类型系统” : Java具有复杂的类型系统,因为它的附加功能使其更加复杂和缓慢。
- C/C++ – “复杂的类型系统以及缓慢的编译时间” :C/C++ 是在计算机没有那么多空间的情况下设计的,因此开发人员决定使用最少的空间来优化编译器,从而导致编译器运行缓慢时间。
- 此外,所有这些语言都是在多线程应用程序很少的情况下设计的,因此对于高度可扩展的并发和并行应用程序效果不佳。
Golang的特点:
- 强和静态类型语言: Go 是强和静态类型语言。强意味着一旦您使用某种数据类型创建了一些变量,那么对于整个应用程序,它将保持类型。静态意味着所有变量都必须在编译时定义。
- 优秀社区: Golang 拥有优秀的问题跟踪和解决社区。
- 快速编译: Golang 将仅包含将直接在代码中导入的包。
- 垃圾收集: Go 的自动垃圾收集非常快。
- 内置并发: Go 具有内置的并发特性。使用 Go 例程和通道,您可以非常轻松有效地处理并发。
从 Golang 编程开始
Golang 编程:由于 Golang 在语法上与其他广泛使用的语言非常相似,因此在 Golang 中编码和学习更容易。程序可以在任何广泛使用的文本编辑器(如Notepad++ 、 gedit等)或任何文本编辑器中用 Golang 编写。编写程序后,使用扩展名.go或.GO保存文件。
有各种在线 IDE,例如The Go Playground、repl.it等,可用于运行 Go 程序而无需安装它。为了在 PC 或笔记本电脑上安装 Go,我们需要两个软件文本编辑器,它为您提供一个平台,您可以在其中编写源代码和编译器。文本编辑器可以是 OS Edit Command、Brief、vm 或 vi、notepad、notepad++ 等。
示例:打印Hello Geeks! 的简单程序.
Java
package main
import "fmt"
func main() {
// prints Hello, Geeks!
fmt.Println("Hello, Geeks!")
}
输出:
Hello, Geeks!
Go程序语法说明:
- 第1行:包含程序的main包,包含程序的整体内容,是程序运行的起点,所以必须写。
- 第 2 行:它包含import “fmt” ,这是一个预处理器命令,它告诉编译器包含位于包中的文件。
- 第 3 行: main函数,它是程序执行的开始。
- 第 4 行: fmt.Println()是一个标准库函数,用于在屏幕上打印一些东西作为输出。其中, fmt包传输了 Println 方法,用于显示输出。
- 注释:注释用于解释代码,其使用方式与Java或 C 或 C++ 中的使用方式类似。编译器忽略注释条目并且不执行它们。注释可以是单行或多行。
- 单行评论:
句法:
- 单行评论:
// single line comment
- 多行注释:
句法:
/* multiline comment */
优点
- 快: Go 没有虚拟机,可以直接编译成机器码。排除 Go 的中间程序集使它非常快。
- 易于学习:语法略有变化,因为它看起来与其他编程语言语言几乎相似。
- 并发:它允许多个进程同时有效地运行。
- 开源:它是免费和开源的,社区随时为您提供帮助。
- 垃圾收集:这是 Go 的一个关键特性。 Go 擅长对内存分配进行大量控制,并且在最新版本的垃圾收集器中大大减少了延迟。
- 内置测试工具: Golang 内置了测试工具,使其更加丰富且易于调试。
缺点:
- 它不支持泛型,即使有很多关于它的讨论。
- 用这种编程语言分发的包非常有用,但 Go 并不是传统意义上的面向对象。
- 缺少一些库,尤其是 UI 工具包。