Différence entre [] uint8 & amp; & amp; [] octet (tranches de Golang)
L'une des fonctions que je suis en cours d'exécution: image.Decode()
L'image.Décoder fonction prend en io.Lecteur && et l'oi.Fonction lecteur prend dans un []byte.
Quand je passe dans un []uint8, si me donne cette erreur:
panic: image: unknown format
Comment puis-je convertir []uint8 []byte?
Mise à JOUR
L'erreur qui se passe à l'étoilé de la zone en raison de l'image.Décoder ne pouvez pas lire la variable 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")
}
}
source d'informationauteur Jorge Olivero
Vous devez vous connecter pour publier un commentaire.
De sortie:
Vous avez mal diagnostiquée votre problème.
Que les autres réponses ont expliqué, il n'y a pas de problème en passant un
[]uint8
où un[]byte
est nécessaire. Si c'était votre problème, vous devriez obtenir une erreur de compilation. Vous n'êtes pas. La panique est une erreur d'exécution, et il est jeté par la bibliothèque d'images lors de la lecture des données dans la tranche.En effet, l'image de la bibliothèque n'est que partiellement le problème. Voir http://golang.org/src/pkg/image/format.go. Elle retourne un message d'erreur car il ne reconnaît pas le format d'image des données dans la tranche. Votre code, ce qui appelle
image.Decode()
appellepanic
quandimage.Decode()
retourne le message d'erreur.Si vous avez une variable
imageData
qui est[]uint8
vous pouvez passer[]byte(imageData)
Voir http://golang.org/ref/spec#Conversions