go

相关资源

资源 组织 类型
gk golang geeksforgeeks 教程
go pkg go 社区
go 语言中文网 studygolang 社区
godoc 标准库 studygolang 文档
go json 结构转换工具 golangs 工具
open source insight osi 工具

Beginner

links:

mod

links:

初始化一个 go 项目。

1
2
go mod init github.com/<username>/<project>
touch main.go

go mod

在 Go 语言中,Go Modules 是用于包管理和版本控制的官方解决方案。下面是一些常用的 Go Modules 命令及其相关解释:

  • go mod init:初始化一个新的 Go Modules 项目。这个命令会创建一个 go.mod 文件来记录项目的依赖关系和版本信息。

  • go mod tidy:根据代码中的导入语句和已有的依赖关系,自动将项目的 go.mod 文件更新为最新状态。它会移除不再使用的依赖项,并添加缺失的依赖项。

  • go mod vendor:将项目的依赖项复制到项目根目录下的 vendor 目录中。这样可以将所有的依赖项存放在项目本地,以便离线构建和更好的版本控制。

  • go mod download:下载并缓存项目的依赖项。这个命令会下载所有的依赖项到本地缓存中,以便后续的构建操作使用。

  • go mod verify:验证项目的依赖项是否完整和正确。它会检查缓存中的依赖项和 go.sum 文件中记录的哈希值是否匹配,以确保依赖项没有被篡改。

  • go mod graph:打印项目的依赖图。它会列出所有的依赖项及其之间的依赖关系,以帮助理解项目的依赖结构。

  • go mod edit:手动编辑 go.mod 文件。可以使用这个命令来添加、删除或修改依赖项,或者手动调整版本约束。

  • go mod why:显示指定模块为什么被选择。可以使用这个命令来查看特定模块被引入的原因,以及它与其他模块的冲突解决方式。

这些是一些常用的 Go Modules 命令及其相关解释。使用这些命令,可以更好地管理和控制 Go 项目的依赖关系,并确保项目的构建过程稳定和可靠。

channel

select

从多个 channel 中选择一个执行。

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
package main

import "fmt"

func main() {
intCh := make(chan int) // intCh is a channel for integers
strCh := make(chan string) // strCh is a channel for strings

// Anonymous function to send integer to intCh
go func() {
intCh <- 42
}()

// Anonymous function to send string to strCh
go func() {
strCh <- "hello"
}()

// Select statement to receive from intCh or strCh
select {
case value := <-intCh:
fmt.Println(value)
case value := <-strCh:
fmt.Println(value)
}
}

done channel

done channel 可以用于主动停止一个 goroutine。

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
package main

import (
"fmt"
"time"
)

// infiniteLoop runs an infinite loop until a signal is received on the done channel
func infiniteLoop(done <-chan bool) {
for {
select {
case <-done: // if a signal is received on the done channel
return // exit the infinite loop
default:
fmt.println("working...")
}
}
}

func main() {
done := make(chan bool) // create a boolean channel called done
go infiniteLoop(done) // start running the infiniteLoop in a separate goroutine

time.Sleep(10 * time.Second) // sleep for 10 seconds
close(done) // close the done channel to signal the infiniteLoop to stop
}

pipeline pattern

pipeline pattern 用于创建异步任务管道,可以模拟一个生成器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import "fmt"

// generator is a function that returns a channel to generate integers
func generator(num int) <-chan int {
ch := make(chan int)

go func() {
for i := 0; i < num; i++ {
ch <- i
}
close(ch)
}()

return ch
}

// caller is a function that calls the generator function and prints the generated values
func caller() {
gen := generator(10)
for value := range gen {
fmt.Println(value)
}
}

Project

gin-vue-admin

基于 gin-vue-admin 构建的后台管理系统.

links:

Cobra

Cobra 是一个命令行开发框架,用于快速构建命令行工具。

links: