GO语言学习(一:背景与代码初始)
最近刚好有一段空闲时间,想用这段时间学一些新鲜的知识,因此趁机接触了go语言(同时还想再深入学一下深度学习,我会发相关博客)
1.go语言的优势
-
简洁性:Go语言的设计哲学是简洁和高效。它的语法简单直观,易于学习和使用。相较于C++、Java等语言,Go语言的语法更加简洁,去掉了类和继承等概念,减少了程序员需要学习的复杂性。
-
高性能:Go是编译型语言,这意味着Go程序在运行前会被编译成机器码,这直接导致了其高性能。此外,Go语言的内存管理和垃圾回收机制也有助于提高性能。
-
并发支持:Go语言原生支持并发。它通过Goroutine和Channel等机制提供了简洁的并发编程模型,使得并发编程更加容易实现,这对于现代网络服务器和分布式系统来说尤为重要。
-
高效的并发调度:Go的运行时调度器采用了工作窃取算法,可以在多核CPU上高效地调度Goroutine,使得系统能够充分利用多核处理器的计算能力。
-
垃圾回收:Go语言包含自动垃圾回收功能,这有助于减少内存泄漏问题,提高程序的稳定性和可维护性。
-
跨平台编译:Go语言可以轻松地交叉编译,支持多平台和多种操作系统,编写一次代码,可编译运行于不同的平台,如Linux、Windows、macOS等。
-
丰富的标准库:Go拥有一个庞大的标准库,覆盖网络、并发、加密、数据处理等多个方面,这极大地提高了开发效率。
-
工具链完善:Go语言的工具链简单且易于使用,如go命令行工具、包管理、测试框架等,都极大地促进了Go语言的开发效率。
-
社区和支持:Go语言有一个活跃的社区,Google作为其背后的支持者,也不断地推动Go语言的发展和生态系统的建设。
2.第一个go程序
(1)写代码
package main
import "fmt"
func main() {
fmt.Printf("Hello,world\n")
}
(2)运行
我这里写到指定的文件的目录下,再用‘go run 文件名’ 的方式运行文件
(3)代码分析
这行代码声明了该程序所在的包名是main
。在Go中,每个程序都至少包含一个包,且每个包都有一个唯一的名称。main
包是程序的入口点,意味着当程序运行时,会从main
包开始执行。
import "fmt"
这行代码导入了fmt
包,fmt
是“format”的缩写,它提供了格式化输入和输出的功能。在这个例子中,fmt
包被用来打印字符串到标准输出。
func main() {
这行代码定义了一个名为main
的函数。在Go程序中,main
函数是程序执行的入口点。当你运行一个Go程序时,它会从main
函数的第一行代码开始执行。
fmt.Printf("Hello,world\n")
这行代码调用了fmt.Printf
函数,它是fmt
包中的一个函数,用于格式化并打印输出。这里它被用来打印字符串"Hello, world\n",其中\n
是一个换行符,它会使得输出后在屏幕上产生新的一行。
3.语言特性
此部分是我参照了李文塔的《GO语言核心编程》,感觉很有价值,因此摘抄下来:
编程语言有几百种,语法形式千差万别,将这些语法进行抽象概括,剔除表现形式的差异,就形成了一个个表达的语言特性,有些语言特性是某个语言独有的,但绝大部分语言特征是很多语言共有的,总的语言特性就几十种,下面归纳一下常用的高级语言的语言特征。
语言组织
所有 的高级语言都使用源代码来表达程序,程序的语法格式千差万别,但表达这些语法的基本概念大同小异,主要包括:
- 标识符和关键字
- 变量和常量
- 运算符
- 表达式
- 简单语句
- 控制结构
类型系统
每种高级语言都有自己的类型系统,类型系统的特性主要表现在以下几个方面。
- 动静特性:动态语言还是静态语言
- 类型强弱:强类型还是弱类型
- 基本数据类型:包括类型及其支持的运算和操作集合
- 自定义数据类型:包括类型及其支持的运算和操作集合
抽象特性
- 函数:是否支持函数,匿名函数,高阶函数,闭包等
- 面向对象:是否支持面向对象
- 多态:如何支持多态
- 接口:是否支持接口,以及接口实现模式
元编程特性
- 泛型:是否支持泛型
- 反射:是否支持反射,反射的能力
运行和跨平台语言特性
- 编译模式:是编译成可执行程序,还是编译成中间代码,还是解释器解释执行
- 运行模式:直接由OS加载运行,还是由虚拟机加载执行
- 内存管理:是否支持垃圾回收
- 并发支持:是否原生支持并发,还是库支持
- 交叉编译:是否支持交叉编译
- 跨平台支持:是否支持多个平台
语言软实力特性
- 库:标准库和第三方库是否丰富,好用,高效
- 框架:是否有非常出众的框架
- 语言自身兼容性:语言规范是否经常变换,语言新版本向前兼容性
- 语言影响力:是否有商业公司支持,社区的活跃性,是否是著名项目