「Go」Golang

简介

Go 是一种开源的编程语言,它由 Google 公司的工程师们在 2007 年提出,并在 2009 年开源。Go 是一种静态类型、编译型、并发型的语言。

Go 的主要目标是提供一种简单、可扩展、快速、可靠的编程语言,它既适用于大型项目,也适用于小型项目。Go 语言的设计目标是让程序员快速开发出高质量的程序,同时也能使这些程序运行得更快。

Go 语言提供了丰富的内置类型、结构体、接口、函数等

如果你想学习 Go 语言,下面是一些建议:

  1. 首先,你应该去 Go 语言官网(https://golang.org/)下载并安装 Go 语言的开发工具。Go 语言官网还提供了完整的 Go 语言文档,可以作为参考手册。

  2. 然后,你可以通过学习 Go 语言的官方教程(https://tour.golang.org/)来了解 Go 语言的基本语法和用法。这个教程提供了许多在线实例,可以让你在线实时编写和执行 Go 代码。

  3. 在学习完基本语法后,你可以阅读 Go 语言官方文档(https://golang.org/doc/)中的“Effective Go”一章,了解 Go 语言的设计哲学和编码规范。

  4. 随后,你可以阅读 Go 语言官方文档中的其他章节,了解 Go 语言的标准库、工具和其他特性。

  5. 最后,你可以在网上搜索 Go 语言的相关书籍和教程,找到适合你的学习方式

特点

  • 静态类型:Go 语言是一种静态类型语言,它的类型系统严格,能够检查出许多类型错误。
  • 并发型:Go 语言提供了丰富的并发模型,原生支持并发编程,提供了 goroutine 和 channel,可以方便地编写多核、高并发的程序。
  • 简单易学:Go 语言的语法简单易懂,可以轻松上手,适合初学者。
  • 编译速度快:Go 语言的编译速度快,生成的可执行文件体积小,可以提高开发效率。
  • 内存管理好:Go 语言内置了垃圾回收机制,可以自动管理内存,避免内存泄漏问题。
  • 功能强大的标准库:Go 语言拥有丰富的标准库,可以方便地实现常见的功能。
  • 支持多种操作系统:Go 语言可以运行在多种操作系统上,包括 Windows、Mac OS、Linux 等。

缺点

  • 异常处理不够完善:Go 语言的异常处理机制不够完善,不能像其他语言那样抛出和捕获异常。
  • 运行速度不够快:Go 语言的运行速度不如 C++ 和 Java 等其他语言。
  • 编译速度慢:Go 的编译速度相对于其他语言比较慢,这对于快速迭代和开发来说不太方便。
  • 文档与社区支持不足:Go 的文档和社区支持相对于其他流行的语言来说还不够完善,第三方函数库暂时没有主流编程语言多
  • 单进程限制:Go 语言默认的是单进程,如果需要多进程的话,需要手动编写代码来实现。
  • 数据类型与类型转换限制:Go 语言在数据类型和类型转换方面比较严格,不太适合大型项目开发。
  • 静态类型语言限制:Go 语言是一门静态类型语言,这对于一些动态语言的程序员来说不太习惯。
  • 对于并发编程的限制:Go 语言的并发模型相对于其他语言来说比较特殊,不太适合熟悉其他语言的程序员。

安装与下载

其他系统版本参考官方链接进行下载安装:https://go.dev/doc/install

无法访问的用户可以通过中文网的下载地址进行安装:https://studygolang.com/dl

Linux 下需要设置 4 个环境变量:GoRoot、GoPath、GoBin及Path 到profile文件中(~/.bash_profile(单一用户)或/etc/profile(所有用户))

  • GOROOT:该环境变量的值应该为Go语言的当前安装目录,例如:

export GOROOT =/usr/local/go

  • GOPATH:该环境变量的值应该为Go语言的工作区的集合,例如:

export GOPATH=~/golib:~/goproject

  • GOBIN:它的值应该是你想存放Go程序的可执行文件的目录,例如:

export GOBIN=~/gobin

  • PATH:为了方便使用Go语言命令和Go程序的可执行文件,需要追加其值,如:

export PATH=$PATH:$GOROOT/bin:$GOBIN

然后通过source 命令使文件生效,如source ~/.bash_profile

macOS 下可使用brew 安装

超找 go

1
brew search go

下载安装指定版本

1
brew install go@1.19

查看安装版本验证安装结果

1
go version

设置模块代理

参考 https://goproxy.cn/

macOS 或 Linux

1
2
export GO111MODULE=on
export GOPROXY=https://goproxy.cn

Windows

打开你的 PowerShell 并执行

1
2
$env:GO111MODULE = "on"
$env:GOPROXY = "https://goproxy.cn"

编写

新建一个 .go 结尾的文件

写入一下内容

helloworld.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 声明文件所在包,每个 go 文件必须有归属的包
package main

// 引入程序中需要用到的包,以使用包中的函数/方法,例如 Println()
import (
"fmt"
)

// 主函数 程序入口
func main() {
// 含有格式化输出、接收输入的函数
// 在控制台中输出一句话,双引号中的内容(字符串)会原样输出
fmt.Println("Hello World")
}

编译 & 执行

在go文件目录下打开命令行执行以下命令即可编译成可执行的二进制文件

1
go build

此外,在不同平台环境中编译其他平台命令如下:

macOS

Mac下编译Linux, Windows平台的64位可执行程序

Linux

1
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build helloworld.go

Windows

1
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build helloworld.go

Linux

Linux下编译Mac, Windows平台的64位可执行程序

macOS

1
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build helloworld.go

Windows

1
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build helloworld.go

Windows

Windows下编译Mac, Linux平台的64位可执行程序

macOS

1
2
3
4
SET CGO_ENABLED=0
SET GOOS=darwin3
SET GOARCH=amd64
go build helloworld.go

Linux

1
2
3
4
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build helloworld.go

语义如下:

GOOS:目标可执行程序运行操作系统,支持 darwin,freebsd,linux,windows

GOARCH:目标可执行程序操作系统构架,包括 386,amd64,arm

执行

也可以通过 go run helloworld.go 来直接编译运行

基本语法

  • 变量定义:在 Go 语言中,变量需要在使用前进行定义。变量定义的语法格式为:var variable_name type。例如:
1
2
3
Copy code
var name string
var age int
  • 常量定义:Go 语言支持常量定义,常量的值在程序运行期间不能被改变。常量定义的语法格式为:const constant_name = value。例如:
1
2
Copy code
const Pi = 3.14
  • 运算符:Go 语言支持常见的算数、关系和逻辑运算符。例如,加法运算符为 +,减法运算符为 -,小于运算符为 < 等。
  • 控制语句:Go 语言支持常见的控制语句,包括 if、else、for、switch 等。例如,if 语句的语法格式为:
1
2
3
4
Copy code
if condition {
// code to be executed if condition is true
}
  • 函数:Go 语言支持函数定义和调用。函数定义的语法格式为:
1
2
3
4
5
Copy code
func function_name(parameter1 type1, parameter2 type2) return_type {
// code to be executed
return value
}

函数调用的语法格式为:

1
2
Copy code
function_name(parameter1, parameter2)

下面是一个简单的Go语言程序,它演示了一些基础语法的用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package main

import "fmt"

func main() {
// 定义一个变量
var a int = 10
var b int = 20

// 使用if语句
if a < b {
// 使用fmt包的Println函数
fmt.Println("a is less than b")
}

// 使用for循环
for i := 0; i < 5; i++ {
fmt.Println(i)
}

// 定义一个函数
func add(x int, y int) int {
return x + y
}

// 调用函数
result := add(a, b)
fmt.Println(result)
}

上面的程序定义了两个变量ab,并使用if语句来比较它们的值。它还使用了for循环来打印一些数字,定义了一个函数来计算两个数的和,并调用了这个函数。

其他更多内容请参考网站进行扩展学习

参考

官网

Go语言中文网

Go语言圣经

Go语言高级编程

菜鸟教程网(推荐)