Ответ прекращается после X - PullRequest
0 голосов
/ 03 января 2019
package main

import (
    "fmt"
    "log"
    "net/http"
    "os"

    "github.com/steven-ferrer/gonsole"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there!\n")
    file, err := os.Open("ItemLog.txt")
    if err != nil {
        log.Fatal(err)
    }

    reader := gonsole.NewReader(file)
    counter := 0
    for {
        foo, _ := reader.NextWord()
        if foo == "<Kept>" {
            counter++
            fmt.Fprintf(w, "%d"+": ", counter)
            foo, _ = reader.NextWord()
            for foo != "|" {
                fmt.Fprintf(w, foo+" ")
                foo, _ = reader.NextWord()
            }
            if foo == "|" { // need to reader.NewLine instead but this will work for now.
                fmt.Fprintf(w, "\n")
            }
        }
    }
}
func main() {
    http.HandleFunc("/", handler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

Мой локальный CLI работает, но когда я пытаюсь обернуть его на сервере, выводится только очень много строк. Это как раз или что-то в этом роде. Помощь * * 1002

Мне нужно больше текста, поэтому: я разбираю текстовый файл.

Редактировать: вот тестовый файл ... https://pastebin.com/ZNbut51X

1 Ответ

0 голосов
/ 03 января 2019

Вы не помогаете себе игнорировать ошибки:

foo, _ := reader.NextWord() 

Это очень плохая практика. Проверьте ошибку, и она скажет вам, что происходит.

Обновление:

В вашем коде бесконечный цикл.

for {
        ...
    }

for{} работает до тех пор, пока вы не вызовете continue или return внутри этого цикла.

https://tour.golang.org/flowcontrol/4

В вашем случае он не может работать вечно, потому что выполняемая им подпрограмма завершается по таймауту.

Обновление2:

Бесконечный цикл не совместим с HTTP. С помощью веб-службы вы получаете запрос и должны вернуть ответ, прежде чем процедура go будет завершена по таймауту.

У вас есть два варианта:

  1. отправлять запросы по таймеру каждые x секунд и возвращать последние данные вызывающая сторона в обработчике.
  2. реализовать технологию, которая поддерживает двунаправленную связь между клиентом и сервером - https://godoc.org/golang.org/x/net/websocket

Оба варианта, к сожалению, сложнее консольного приложения :(

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