Как напечатать следующую строку после обновления? - PullRequest
0 голосов
/ 19 ноября 2018

Я хочу создать /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.

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)
    }
}

1 Ответ

0 голосов
/ 19 ноября 2018

Поскольку n является локальной переменной, она всегда будет повторно объявляться со значением 0 всякий раз, когда вы вызываете эту функцию GetLine().Может быть, вам нужна глобальная переменная для сохранения значения последней строки: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...