Go语言入门1：Go简介

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 开发工具包

Copy
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 语言的基础组成有以下几个部分：

包声明

引入包

函数

变量

语句 & 表达式

注释

Copy
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（输入 / 输出）的函数。导入多个包时，可使用以下两种方式，推荐第二种。

Copy
import "fmt"
import "time"

import (
"fmt"
"time"
)

// 和 /* */ 分别是单行注释和多行注释，这与 C 语言一致

func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的，一般来说都是在启动后第一个执行的函数（如果有 init() 函数则会先执行该函数）。每个包只能有一个 main 函数，不能存在多个 main 函数声明

需要注意的是，Go 语言中函数后的 { 必须跟函数名同一行，否则不能报错。同时语句结尾的 ; 可加可不加，推荐不加。

Copy
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 工程师