[] uint8&&和[]字节(Golang Slices)

时间:2014-04-08 23:52:52

标签: go

我正在运行的一个功能:image.Decode()

image.Decode函数接收io.Reader&&并且io.Reader函数接受[]字节。

当我传入[] uint8时,如果给我这个错误:

panic: image: unknown format

如何将[] uint8转换为[]字节?

UPDATE

错误发生在星号区域,因为image.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")
      }
    }

3 个答案:

答案 0 :(得分:42)

  

The Go Programming Language Specification

     

Numeric types

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]

你误解了你的问题。

答案 1 :(得分:6)

正如其他答案所解释的那样,将[]uint8传递到需要[]byte的地方是没有问题的。如果这是您的问题,您将收到编译时错误。你不是。恐慌是运行时错误,当图像库读取切片中的数据时,它会被图像库抛出。

事实上,图像库只是你的问题。见http://golang.org/src/pkg/image/format.go。它返回错误消息,因为它无法识别切片中数据的图像格式。当image.Decode()返回错误消息时,调用panic的代码正在调用image.Decode()

答案 2 :(得分:-1)

如果您的变量imageData[]uint8,则可以通过[]byte(imageData)

请参阅http://golang.org/ref/spec#Conversions