feat(auth): 添加完整的用户认证API项目
- 实现用户注册、登录、JWT令牌认证功能 - 集成Gin、GORM、Viper、Zap等框架 - 添加密码加密、数据库操作、中间件等完整功能 - 配置多环境支持、日志轮转、CORS处理 - 创建完整的项目结构和配置文件体系
This commit is contained in:
35
go并发模型/02go-channel-practice/buffered.go
Normal file
35
go并发模型/02go-channel-practice/buffered.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ch := make(chan int, 3) // 容量为 3 的有缓冲 channel
|
||||
|
||||
fmt.Println("[Main] 开始发送 3 个元素...")
|
||||
ch <- 1
|
||||
fmt.Println("[Main] 已发送 1")
|
||||
ch <- 2
|
||||
fmt.Println("[Main] 已发送 2")
|
||||
ch <- 3
|
||||
fmt.Println("[Main] 已发送 3 (已满)")
|
||||
|
||||
// 再发送一个会怎样?
|
||||
go func() {
|
||||
fmt.Println("[Sender] 尝试发送第 4 个元素(会阻塞,直到有接收者)...")
|
||||
ch <- 4
|
||||
fmt.Println("[Sender] 第 4 个元素发送成功")
|
||||
}()
|
||||
|
||||
time.Sleep(1 * time.Second)
|
||||
|
||||
fmt.Println("[Main] 开始接收...")
|
||||
for i := 0; i < 4; i++ {
|
||||
v := <-ch
|
||||
fmt.Println("[Main] 收到:", v)
|
||||
}
|
||||
|
||||
fmt.Println("[Main] 程序结束")
|
||||
}
|
||||
28
go并发模型/02go-channel-practice/directional.go
Normal file
28
go并发模型/02go-channel-practice/directional.go
Normal file
@@ -0,0 +1,28 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
// 只负责发送数据
|
||||
func producer(out chan<- int) {
|
||||
for i := 1; i <= 5; i++ {
|
||||
fmt.Println("[Producer] 发送:", i)
|
||||
out <- i
|
||||
}
|
||||
fmt.Println("[Producer] 关闭 channel")
|
||||
close(out) // 只有发送方才能关闭
|
||||
}
|
||||
|
||||
// 只负责接收数据
|
||||
func consumer(in <-chan int) {
|
||||
for v := range in { // 直到 channel 被关闭
|
||||
fmt.Println("[Consumer] 接收:", v)
|
||||
}
|
||||
fmt.Println("[Consumer] channel 已关闭,接收结束")
|
||||
}
|
||||
|
||||
func main() {
|
||||
ch := make(chan int)
|
||||
|
||||
go producer(ch) // ch 在这里被当作 只发送 channel 使用
|
||||
consumer(ch) // ch 在这里被当作 只接收 channel 使用
|
||||
}
|
||||
3
go并发模型/02go-channel-practice/go.mod
Normal file
3
go并发模型/02go-channel-practice/go.mod
Normal file
@@ -0,0 +1,3 @@
|
||||
module go-channel-practice
|
||||
|
||||
go 1.22.2
|
||||
37
go并发模型/02go-channel-practice/pipeline.go
Normal file
37
go并发模型/02go-channel-practice/pipeline.go
Normal file
@@ -0,0 +1,37 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
// 生产者:产生 1~5
|
||||
func producer1(out chan<- int) {
|
||||
for i := 1; i <= 5; i++ {
|
||||
fmt.Println("[Producer] 发送:", i)
|
||||
out <- i
|
||||
}
|
||||
close(out)
|
||||
}
|
||||
|
||||
// 处理者:把数字放大 10 倍
|
||||
func multiplier(in <-chan int, out chan<- int) {
|
||||
for v := range in {
|
||||
fmt.Println("[Multiplier] 接收:", v)
|
||||
out <- v * 10
|
||||
}
|
||||
close(out)
|
||||
}
|
||||
|
||||
// 消费者:打印结果
|
||||
func consumer1(in <-chan int) {
|
||||
for v := range in {
|
||||
fmt.Println("[Consumer] 最终结果:", v)
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
ch1 := make(chan int, 2) // 有缓冲,减轻 producer 阻塞
|
||||
ch2 := make(chan int, 2)
|
||||
|
||||
go producer1(ch1)
|
||||
go multiplier(ch1, ch2)
|
||||
consumer1(ch2)
|
||||
}
|
||||
24
go并发模型/02go-channel-practice/unbuffered.go
Normal file
24
go并发模型/02go-channel-practice/unbuffered.go
Normal file
@@ -0,0 +1,24 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ch := make(chan string) // 无缓冲 channel
|
||||
|
||||
go func() {
|
||||
fmt.Println("[Sender] 准备发送数据...")
|
||||
ch <- "hello from goroutine" // 这里会阻塞,直到有人接收
|
||||
fmt.Println("[Sender] 数据发送完毕")
|
||||
}()
|
||||
|
||||
time.Sleep(1 * time.Second)
|
||||
fmt.Println("[Main] 1 秒后开始接收数据...")
|
||||
|
||||
msg := <-ch // 接收数据,同时解除发送方阻塞
|
||||
fmt.Println("[Main] 收到:", msg)
|
||||
|
||||
fmt.Println("[Main] 程序结束")
|
||||
}
|
||||
Reference in New Issue
Block a user