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: