首页 > 解决方案 > 刷新后如何打印下一行?

问题描述

我想创建一个/health显示歌曲的每一行的。我试图在刷新页面后显示歌曲的下一行,但我下面的代码不起作用,我不知道缺少什么。

期待

每次像这样刷新后,它应该从歌曲中返回不同的行。

➜ curl http://localhost:8080/health
It starts with one thing

➜ curl http://localhost:8080/health
I don't know why

➜ curl http://localhost:8080/health
It doesn't even matter how hard you try

现实

➜ curl http://localhost:8080/health
It starts with one thing

➜ curl http://localhost:8080/health
It starts with one thing

➜ curl http://localhost:8080/health
It starts with one thing

main.go以下是和的一些行testlib.go

测试库

func GetLine() func() string {
    n := 0
    lines := strings.Split(readFile(), "\n")
    length := len(lines) - 1

    return func() string {
        nextLine := lines[n]

        if n == length {
            n = 0

            return nextLine
        }

        n++
        return nextLine
    }
}

func Handler(next http.HandlerFunc) http.HandlerFunc {
    return func (w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type", "text/plain; charset=utf-8")
        log.Println(r.URL.Path)
        next.ServeHTTP(w, r)
    }
}

main.go

func health(w http.ResponseWriter, r *http.Request) {
    line := testlib.GetLine()

    fmt.Fprintln(w, line())
}

func main() {
    http.Handle("/health", testlib.Handler(health))
    log.Printf("http://127.0.0.1:8080 is now listening.")

    if err := http.ListenAndServe("127.0.0.1:8080", nil); err != nil {
        log.Fatal(err)
    }
}

标签: go

解决方案


因为是局部变量,所以每当您调用该函数时n,它总是会用值重新声明。可能您需要一个全局变量来保存最后一行的值:D0GetLine()


推荐阅读