Напишите на устройстве термопринтера в golang

У меня есть термопринтер (ESC/POS), уже настроенный на моей Linux-машине, и с помощью команды терминала (как root) я могу заставить его печатать:

echo "Hello!" > /dev/usb/lp0

Однако при выполнении той же процедуры в golang ничего не происходит:

package main

import (
    "fmt"
    "os"
)

func main() {
   fmt.Println("Hello Would!")

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

   if err != nil {
       panic(err)
   }

   defer f.Close()

   f.Write([]byte("Hello world!"))
}

Что я делаю не так?


person Augusto Pimenta    schedule 10.11.2018    source источник
comment
Может быть, что-то вроде godoc.org/github.com/google/gousb?   -  person grooveplex    schedule 10.11.2018


Ответы (1)


Как описано в документации, os.Open() открывает файл только для чтения.

Вы бы обнаружили проблему, если бы проверили результат вызова Write(). Всегда проверяйте ошибки. Не игнорируйте их даже в таких крошечных программах, как эта; они дадут вам ключ к пониманию того, что не так.

Чтобы устранить проблему, откройте устройство специально для записи с помощью os.OpenFile().

f, err := os.OpenFile("/dev/usb/lp0", os.O_RDWR, 0)
person Michael Hampton    schedule 10.11.2018