Go语言入门1:Go简介
Table of Contents
Go 语言入门基础学习笔记之 Go 语言简介
简介
Go 语言,又称为 Golang,是由 Google 开发的一种静态强类型、编译型的开源编程语言。它由 Robert Griesemer、Rob Pike 和 Ken Thompson 在 2007 年设计,并于 2009 年正式对外发布。Go 语言的设计目标是提高编程效率,解决多核处理器并发编程的问题,并提高代码的可读性和可维护性。Go 语言以其高性能、高并发和简洁的语法,在现代软件开发中越来越受欢迎。
优势
- 极其简单的部署方式
- 可直接编译成机器码
- 不依赖其他库(可执行文件较大,把全部所需的库静态编译)
- 直接运行即可部署
- 静态类型语言
- 编译的时候检查出来隐藏的大多数问题
- 语言层面的并发
- 天生的基因支持并发
- 充分利用多核
- 强大的标准库
- runtime 系统调度机制
- 高效的 GC 垃圾回收机制
- 丰富的标准库:网络通信、数学、文件系统、数据结构、应用构建、加解密、测试、Email、输入输出、压缩、同步锁机制、进程线程等
- 简单易学
- 25 个关键字
- C 语言简洁的基因,内嵌 C 语法支持
- 面向对象特征(继承、多态、封装)
- 跨平台
- “大厂”领军
- Google、Facebook
- 腾讯、百度、京东
- 小米、七牛、滴滴、阿里、新浪、哔哩哔哩、字节
利用斐波那契数列算法简单看看 Go 的性能情况:
- 编译性能:
Go > C > Node.js > PHP > C++ > Java > Python 3
- 运行性能:
C++ > C > Go > Java > Node.js > PHP > Python 3
强项
- 云计算基础设施领域。代表项目:docker、kubernetes、etcd、consul、cloudflare CDN、七牛云存储等。
- 基础后端软件。代表项目:tidb、influxdb、cockroachdb 等。
- 微服务。代表项目:go-kit、micro、monzo bank 的 typhon、bilibili 等。
- 互联网基础设施。代表项目:以太坊、hyperledger 等。
明星产品:Docker、Kubernetes
缺点
- 包管理,大部分包都在 GitHub 上。
- 所有的 Exception 都用 Error 来处理(比较有争议,与 Java 完全相反)
- 对 C 的降级处理,并非无缝,没有 C 降级到 asm 那么完美(序列化问题,还不能取代 C)
环境安装
All releases - The Go Programming Language
Windows 下载 go1.23.2.windows-amd64.zip 或 go1.23.2.windows-amd64.msi ,并将其中的 bin
文件夹添加进环境变量:
在系统变量中,新建一个变量名为 GOROOT
,变量值为 Go 安装目录路径。再新建一个变量名为 GOPATH
,变量值为 Go 所有项目的根目录路径。最后在系统变量中的 path 路径添加 %GOROOT\bin%
。
在 Go 项目目录中创建 bin pkg src
三个目录,其中 src
为我们编写项目的根文件夹,bin
和 pkg
分别存放我们安装的第三方依赖和插件。
在终端中输入 go version
返回版本号 go version go1.23.2 windows/amd64
,则安装成功。
打开 VsCode 并安装 Go 语言官方插件,打开终端并执行以下语句,方便安装 Go 开发工具包
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
在 VsCode 中打开命令面板 Ctrl+Shift+p
,输入 Go install
,选中 Install/Upadte Tools
,勾选全部工具并安装,工具会安装到我们上方设置的 GOPATH
环境变量中的 bin pkg
文件夹中。
安装完成后,新建一个项目文件夹 test
,创建一个 main.go
文件,这时一定还要在这个文件夹中输入 go mod init test
,test
需要与项目文件夹的名字一样。完成后会出现一个 go.mod
,就可以编写代码了。
如果完成了以上所有操作,在 vscode 中编写代码依旧会报错,则还需要在 VsCode 中重新设置 GOPATH
和 GOROOT
的路径。
语言结构
Go 语言的基础组成有以下几个部分:
- 包声明
- 引入包
- 函数
- 变量
- 语句 & 表达式
- 注释
package main
import "fmt"
func main() {
/* 这是第一个Go语言程序 */
fmt.Println("Hello, World!")
}
package main
定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main 表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。当前程序有 main 函数,就是 main 包。 这与当前程序文件名没有关系。
import "fmt"
告诉 Go 编译器这个程序需要使用 fmt 包,fmt 包实现了格式化 IO(输入/输出)的函数。导入多个包时,可使用以下两种方式,推荐第二种。
import "fmt"
import "time"
import (
"fmt"
"time"
)
//
和 /* */
分别是单行注释和多行注释,这与 C 语言一致
func main()
是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init()
函数则会先执行该函数)。每个包只能有一个 main 函数,不能存在多个 main 函数声明
需要注意的是,Go 语言中函数后的 {
必须跟函数名同一行,否则不能报错。同时语句结尾的 ;
可加可不加,推荐不加。
func main(){
fmt.Println("hello Go!")
fmt.Println("hello Go!");
}
fmt.Println(...)
可以将字符串输出到控制台,并在最后自动增加换行 \n
,使用 fmt.Print(...)
效果相同。 Print
和 Println
这两个函数也支持使用变量,如:fmt.Println(arr)
,如果没有特别指定,它们会以默认的打印格式将变量 arr 输出到控制台。
当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1
,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);
当标识符以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。
Go 语言的执行有两种方式:
go run hello.go
直接编译程序并执行go build hello.go
编译成二进制文件后,./hello.go
执行二进制文件
参考课程:8小时转职Golang工程师