以下是一个简单的商品秒杀的代码示例,其中包含了防止超卖的逻辑:
package main
import (
"fmt"
"sync"
)
var (
stock = 10 // 商品库存
mutex sync.Mutex // 互斥锁,用于保护商品库存
)
func main() {
// 启动10个协程,同时进行秒杀
for i := 0; i < 10; i++ {
go func() {
for {
// 加锁,保护商品库存
mutex.Lock()
if stock > 0 {
// 如果商品库存大于0,进行秒杀
stock--
fmt.Println("秒杀成功,商品剩余数量:", stock)
} else {
// 如果商品库存已经为0,跳出循环
fmt.Println("秒杀结束!")
mutex.Unlock()
break
}
// 解锁
mutex.Unlock()
}
}()
}
// 等待所有协程结束
for i := 0; i < 10; i++ {
fmt.Scanln()
}
}
在上面的代码中,我们使用了一个互斥锁来保护商品库存,确保在同一时间只有一个协程可以修改库存。在每个协程中,我们使用一个无限循环来进行秒杀,如果商品库存大于0,就减少库存并输出秒杀成功的信息,否则就跳出循环。最后,我们在主函数中等待所有协程结束,以确保所有的秒杀操作都已经完成。
需要注意的是,上面的代码只是一个简单的示例,实际的商品秒杀系统需要考虑更多的因素,例如防止重复秒杀、防止恶意攻击等。