Go语言(Golang)是Google于2009年发布的开源编程语言,以简洁语法、高效并发处理和云计算支持著称,广泛应用于后端开发与云原生领域。Golang是一种静态强类型、编译型语言,Golang具有很强的表达能力,得益于其并发机制,用它编写的程序能够非常有效地利用多核与联网的计算机,其新颖的类型系统则使程序结构变得灵活而模块化。 Go 代码编译成机器码不仅非常迅速,还具有方便的垃圾收集机制和强大的运行时反射机制。

参考原文:

Golang基础语法

golang语言教程

全面掌握Golang全栈开发:从入门到实战

Python 速览:Python 速览 — Python 3.14.0 文档

Golang标准库文档:Golang标准库文档

简介及环境搭建

golang又称go language简称golang,go语言是谷歌推出的一种编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。

安装

安装Go工具的步骤如下:对于Linux、MacOS及FreeBSD系统,您需要下载适当的tar文件,并将其解压到/usr/local目录下,创建Go目录树/usr/local/go(可能需要root权限)。命令如下:

1
2
3
4
5
6
7
8
9
10
11
# 将下载好的tar文件解压到/usr/local目录下
tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz
# 设置环境变量
# 1.创建workspace目录:
mkdir -p $HOME/workspace
# 2.编辑bashrc文件并添加以下内容:
export GOPATH=$HOME/workspace
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
# 执行source $HOME/.bashrc使更改生效
source $HOME/.bashrc

安装验证可以通过一个简单的程序来进行。首先,在$HOME/workspace/src/hello目录下新建一个hello.go文件,并编辑如下内容:

1
2
3
4
5
package main
import "fmt"
func main() {
fmt.Printf("hello, world")
}

使用go build命令编译测试程序,成功后将生成一个名为hello的可执行文件。执行该文件若能显示hello, world则说明已成功安装。

Windows用户除了从源码安装Go外,还有两种官方提供的安装方式:zip归档文件和msi安装包。使用zip文件解压到C盘后,需要配置环境变量GOROOT和PATH。

  1. 下载安装:访问 Go 的官方网站 下载适合你操作系统的安装包。按照安装向导完成安装。
  2. 环境变量配置:安装完成后,确保 GOROOT 和 GOPATH 环境变量已正确设置。
    GOROOT 是 Go 安装目录的路径。
    GOPATH 是你的工作区路径,用于存放 Go 代码和依赖包。
  3. 验证安装: 打开终端或命令提示符,输入以下命令以验证 Go 是否成功安装:go version

Golang项目的大致目录结构

文件手动创建

1
2
3
4
5
6
7
- GOPROJECT
- src
- assest 资源管理
- goCode 项目代码
- goModule01\ main
test.go 模块代码
- goModule02 项目模块

Golang的文件编译

使用命令窗口 进入主程序目录下

使用命令: go build test.go 在当前目录下生成 test.exe 二进制可执行文件

使用 .\test.exe 可运行该编译文件,或者使用 go run test.go 直接编译执行源文件

说明:编译之后生成的二进制可执行文件变大是因为是编译程序把程序所依赖的库文件打包编译。

直接 go run 运行文件不可迁移至非go环境上运行,而 go build 之后的文件能够运行在其他环境上

编译时可额外指定名字,默认使用main函数文件名,使用go build -o name.exe test.go 可指定编译后生成的二进制可执行文件的文件名


Go语言基础

基础语法

  1. **Hello, World!**: 创建一个名为 hello.go 的文件,并写入以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    // 声明文件所在的包,每个go文件必须有归属的包
    package main
    // 导入包,使用包中的函数 比如Print1n
    import "fmt"
    // 程序的主函数,程序的入口函数
    func main() {
    fmt.Println("Hello, World!")
    }

    在终端中运行:go run hello.go

    注意:
    1、在go语言里命名为main的包具有特殊的含义,Go语言的编译程序会试图把这种命名的包编译成二进制的可执行程序文件
    2、所有用Go语言编译的可执行程序都必须要有一个名叫main的包
    3、一个可执行程序有且只有一个main包
    4、当编译器发现某一个包为main时,它一定会发现main() 函数 ,否则不会创建可执行文件
    5、程序编译时,会使用声明main包代码所在目录的目录名为二进制可执行程序的文件名
    6、源文件以go为拓展名
    7、源文件字母严格区分大小
    8、方法由语句构成,每条语句末尾不需要“;”结尾
    9、go的编译器是一行一行进行编译,因此每行只能写一条语句,否则报错,或者使用’;’进行隔开,但是失去代码简洁性
    10、定义的变量或者import包没有使用到则编译不能通过,体验简洁性

  2. 基本数据类型

    • 整型:int,int8,int16,int32,int64,uint,uintptr 等。默认值 0。

      类型 有无符号 占用存储空间 表示范围
      int 32位操作系统4字节/64位操作系统8字节 -231~-231-1/-263~263-1
      int8 1字节8位 -27~27-1
      int16 2字节16位 -215~215-1
      int32 4字节32位 -231~231-1
      int64 8字节64位 -263~263-1
      uint 32位操作系统4字节/64位操作系统8字节 0-2**32-1/02**64-1
      uint8 1字节8位 0~2**8-1
      uint16 2字节16位 0~2**16-1
      uint32 4字节32位 0~2**32-1
      uint64 8字节64位 0~2**64-1
    • 浮点型:float32,float64。浮点数在计算机中的存储方式导致其存在精度损失,建议使用float64。默认值 0。

      类型 存储空间 表示范围
      单精度float32 4字节32位 -3.403E38~3.403E38
      双精度float64 8字节64位 -1.798E308~1.798E308
    • 其他类型:字符类型,bool,string,complex64, complex128。

      Golang没有单独的字符型,使用Byte来保存单个字母字符,byte:uint8的别名,ASCII码字符用此表示,1个字节。默认''

      布尔类型又称bool类型,只允许取true和false,布尔类型占用一个字节,适用于逻辑判断流程控制中,默认 false

      字符串类型是字符连起来的字符序列,默认 ""

  3. 变量声明: 使用 var 关键字声明变量。

    1
    var a int var b string = "Hello" c := 10 // 短变量声明,只能在函数内部使用
  4. 常量: 使用 const 关键字声明常量。

    1
    const Pi = 3.14
  5. 运算符: Go 支持常见的算术运算符、比较运算符、逻辑运算符等。

控制结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 条件语句:
if x > 0 {
fmt.Println("x is positive")
} else if x == 0 {
fmt.Println("x is zero")
} else {
fmt.Println("x is negative")
}
// switch 语句:
switch n {
case 1: fmt.Println("one")
case 2, 3: fmt.Println("two or three")
default: fmt.Println("other")
}
// 循环语句-for 循环:
for i := 0; i < 10; i++ {
fmt.Println(i)
}

函数与方法

1
2
3
4
5
6
7
8
9
10
// 1.定义函数:
func add(a int, b int) int { return a + b }
// 2.多返回值:
func swap(x, y string) (string, string) { return y, x }
// 3.匿名函数与闭包:
add := func(a int, b int) int { return a + b }
// 4.方法: 方法是带有接收者的函数。接收者可以是值接收者或指针接收者。
type Rectangle struct { width, height float64 } func (r *Rectangle) Area() float64 {
return r.width * r.height
}

并发编程

  1. Goroutines: Goroutine 是由 Go 运行时管理的轻量级线程。

    1
    go func() { fmt.Println("Hello from goroutine") }() // 使用 sync.WaitGroup 或其他同步机制等待 goroutine 完成
  2. Channels: Channels 用于在不同的 Goroutines 之间传递数据。

    1
    ch := make(chan int) go func() { ch <- 42 }() value := <-ch fmt.Println(value)

标准库与第三方包

  • Go 标准库提供了丰富的功能,如文件操作、网络编程、加密解密等。
  • 可以使用 go get 命令获取第三方包,例如:go get github.com/someuser/somepackage

测试与调试

  • 使用 testing 包编写单元测试。
  • 使用 go test 命令运行测试。
  • 使用 GDB 或 Delve 进行调试。

项目结构与工具

  • Go 项目通常遵循特定的目录结构,如 main.go, pkg/, cmd/, internal/ 等。
  • 常用工具包括 go mod(模块管理)、gofmt(代码格式化)、golint(代码检查)。