英文:
Create a function with return type of image magick object in go lang
问题
我想创建与存储在S3中的图像对应的ImageMagick对象。因此,我正在编写一个函数,该函数将接受必要的参数并返回ImageMagick对象。但是,我没有成功。这是我正在使用的Imagick库。
func main() {
mw := imagick.NewMagickWand()
defer mw.Destroy()
mw = ObjImagick(bucketName, keyName, region)
}
func ObjImagick(bktName string, kName string, region string) () {
s3Client := s3.New(session.New(), &aws.Config{Region: aws.String(region)})
params := &s3.GetObjectInput{
Bucket: aws.String(bktName),
Key: aws.String(kName),
}
out, err := s3Client.GetObject(params)
if err != nil {
log.Fatal(err)
}
img, err := ioutil.ReadAll(out.Body)
if err != nil {
log.Fatal(err)
}
mw := imagick.NewMagickWand()
defer mw.Destroy()
err = mw.ReadImageBlob(img)
if err != nil {
log.Fatal(err)
}
return mw
}
英文:
I want to create image magick object corresponding to images stroed in S3. So, i was writing a function which will take necessary arguments and return the image magick object. But, no luck with it. This is the Imagick Library which i am using.
func main() {
mw := imagick.NewMagickWand()
defer mw.Destroy()
mw = ObjImagick(bucketName, keyName, region)
}
func ObjImagick(bktName string, kName string, region string) ( ) {
s3Client := s3.New(session.New(), &aws.Config{Region: aws.String(region)})
params := &s3.GetObjectInput{
Bucket: aws.String(bktName),
Key: aws.String(kName),
}
out, err := s3Client.GetObject(params)
if err != nil {
log.Fatal(err)
}
img, err := ioutil.ReadAll(out.Body)
if err != nil {
log.Fatal(err)
}
mw := imagick.NewMagickWand()
defer mw.Destroy()
err = mw.ReadImageBlob(img)
if err != nil {
log.Fatal(err)
}
return mw
}
答案1
得分: 2
好的,以下是翻译好的内容:
func ObjImagick(bktName string, kName string, region string) *imagick.MagickWand {
.......................
mw := imagick.NewMagickWand()
// defer mw.Destroy() 这会在 ObjMagick 返回时销毁 wand。
// 所以你不能在这里调用它,你的函数调用者需要处理销毁对象的操作。
err = mw.ReadImageBlob(img)
if err != nil {
log.Fatal(err)
}
return mw
}
然后调用者需要调用 `.Destroy()`,例如:
func main() {
mw := ObjImagick(bucketName, keyName, region)
defer mw.Destroy()
}
希望对你有帮助!如果还有其他问题,请随时提问。
英文:
Well, NewMagickWand()
returns a *MagickWand
, so you can create your function like:
func ObjImagick(bktName string, kName string, region string) *imagick.MagickWand {
.......................
mw := imagick.NewMagickWand()
// defer mw.Destroy() this destroys the wand when ObjMagick returns.
// so you can't do this here, your func caller needs to handle destroying the object.
err = mw.ReadImageBlob(img)
if err != nil {
log.Fatal(err)
}
return mw
}
Then the caller has to call .Destroy()
, for example:
func main() {
mw := ObjImagick(bucketName, keyName, region)
defer mw.Destroy()
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论