You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现数据先进先出(FIFO)?Go语言代码问题求助

Go代码无法实现FIFO输出,输出结果逆序

我希望以下Go语言代码实现先进先出(FIFO)的输出效果,但当前代码输出是逆序的,第一个输出的总是最后输入的内容。

原代码:

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    for {
        scanner.Scan()
        input := scanner.Text()
        if input == "" {
            break
        }
        defer fmt.Println(input)
    }
}

运行结果:

$ go run main.go
1
2
3

3
2
1

问题原因

问题出在defer的特性上——defer语句会将函数调用延迟到当前函数退出前执行,而且多个defer遵循栈式执行顺序:后声明的defer会先被执行。所以输入1时添加的defer会最后执行,输入3时添加的defer会最先执行,最终输出顺序完全反转。

解决方案

不要用defer延迟输出,而是先把所有输入内容存储到一个切片中,等输入结束后,遍历切片依次输出,就能实现FIFO效果。

修改后的代码:

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    var inputs []string
    for {
        scanner.Scan()
        input := scanner.Text()
        if input == "" {
            break
        }
        inputs = append(inputs, input)
    }
    // 按输入顺序遍历输出
    for _, s := range inputs {
        fmt.Println(s)
    }
}

运行结果示例:

$ go run main.go
1
2
3

1
2
3

内容的提问来源于stack exchange,提问作者zacharyy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 04:20:17