Golang实现秒杀抢购的代码片段

以下是一个简单的商品秒杀的代码示例,其中包含了防止超卖的逻辑:

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,就减少库存并输出秒杀成功的信息,否则就跳出循环。最后,我们在主函数中等待所有协程结束,以确保所有的秒杀操作都已经完成。

需要注意的是,上面的代码只是一个简单的示例,实际的商品秒杀系统需要考虑更多的因素,例如防止重复秒杀、防止恶意攻击等。

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注