Подождите, пока IO Buffer не будет полностью написан на GoLang - PullRequest
0 голосов
/ 29 мая 2018

Я использую принтер (ESC POS), который печатает текст при записи данных на / dev / usb / lp0

Упрощенный код:

package main

import (
    "bufio"
    "os"
)

func main() {

    f, err := os.Create("/dev/usb/lp0")

    if err != nil {
        panic(err)
    }
    defer f.Close()

    w := bufio.NewWriter(f)

    w.Write([]byte("\x1B@"))
    w.WriteString("test-1\n")
    w.WriteString("test-2\n")
    w.WriteString("test-3\n")
    w.WriteString("test-4\n")
    w.WriteString("test-5\n")
    w.WriteString("test-6\n")
    w.WriteString("test-7\n")
    w.WriteString("test-8\n")
    w.WriteString("test-9\n")

    w.Flush()
    f.Sync()
}

и большинствовремя последней строки не печатается, если я не добавлю таймер в самом конце.

Я думаю, что я все правильно закрыл, поэтому не уверен, что здесь происходит ... Если я пишу в файл, онпрекрасно работает Кстати, удача?

Заранее спасибо, я потратил вчера вечером на это, и это сводит меня с ума:)

РЕДАКТИРОВАТЬ: код с обработкой ошибок (на самом деле f.Sync ()не удалось и я его удалил)

    package main

import (
    "bufio"
    "os"
)

func main() {

    f, err := os.Create("/dev/usb/lp0")
    if err != nil {
        panic(err)
    }
    defer f.Close()

    w := bufio.NewWriter(f)

    _, err = w.Write([]byte("\x1B@"))
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-1\n")
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-2\n")
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-3\n")
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-4\n")
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-5\n")
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-6\n")
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-7\n")
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-8\n")
    if err != nil {
        panic(err)
    }
    _, err = w.WriteString("toto-9\n")
    if err != nil {
        panic(err)
    }
    err = w.Flush()
    if err != nil {
        panic(err)
    }
}
...