Подтвердить что ты не робот

Разница между [] uint8 && [] байт (Golang Slices)

Одна из выполняемых мной функций: image.Decode()

Функция image.Decode включает в себя io.Reader && и функция io.Reader принимает байт [].

Когда я перехожу в [] uint8, если дает мне эту ошибку:

panic: image: unknown format

Как преобразовать [] uint8 в [] байт?

ОБНОВИТЬ

Ошибка происходит в помеченной области, потому что изображение .Decode не может прочитать переменную xxx.

    package main

    import (
        "github.com/nfnt/resize"
        "image"
        "image/jpeg"
        "fmt"
        "launchpad.net/goamz/aws"
        "launchpad.net/goamz/s3"
        "bytes"
        "encoding/json"
        "io/ioutil"
        "os"
        "reflect"
    )

    type Data struct {
        Key string
    }

    func main() {

      useast := aws.USEast

      connection := s3.New(auth, useast)
      mybucket := connection.Bucket("bucketName")

      image_data, err := mybucket.Get("1637563605030")

      if err != nil {
        panic(err.Error())
      } else {
        fmt.Println("success")
      }

      xxx := []byte(image_data)

      ******* THIS IS WHERE THE ERROR OCCURS **************

      original_image, _, err := image.Decode(bytes.NewReader(xxx))

      ******* THIS IS WHERE THE ERROR OCCURS END **************

      if err != nil {
        fmt.Println("Shit")
        panic(err.Error())
      } else {
        fmt.Println("Another success")
      }

      new_image := resize.Resize(160, 0, original_image, resize.Lanczos3)

      if new_image != nil {
        fmt.Println("YAY")
      }
    }
4b9b3361

Ответ 1

Спецификация языка программирования Go

Числовые типы

uint8       the set of all unsigned  8-bit integers (0 to 255)

byte        alias for uint8

package main

import "fmt"

func ByteSlice(b []byte) []byte { return b }

func main() {
    b := []byte{0, 1}
    u8 := []uint8{2, 3}
    fmt.Printf("%T %T\n", b, u8)
    fmt.Println(ByteSlice(b))
    fmt.Println(ByteSlice(u8))
}

Вывод:

[]uint8 []uint8
[0 1]
[2 3]

Вы неправильно определили свою проблему.

Ответ 2

Как объяснили другие ответы, нет проблемы с передачей []uint8, где требуется []byte. Если это была ваша проблема, вы получите ошибку времени компиляции. Это не так. Паника - это ошибка времени выполнения, и она бросается библиотекой изображений при чтении данных в срезе.

Фактически, библиотека изображений является лишь частично вашей проблемой. См. http://golang.org/src/pkg/image/format.go. Он возвращает сообщение об ошибке, поскольку он не распознает формат изображения данных в срезе. Ваш код, вызывающий image.Decode(), вызывает panic, когда image.Decode() возвращает сообщение об ошибке.

Ответ 3

Если у вас есть переменная imageData, которая []uint8, вы можете пройти []byte(imageData)

См. http://golang.org/ref/spec#Conversions