为了账号安全,请及时绑定邮箱和手机立即绑定

在 go lang 中创建一个返回类型为 image magick 对象的函数

在 go lang 中创建一个返回类型为 image magick 对象的函数

Go
小怪兽爱吃肉 2021-12-07 18:27:05
我想创建与 S3 中的图像对应的图像魔法对象。所以,我正在编写一个函数,它将接受必要的参数并返回图像魔法对象。但是,没有运气。这是我正在使用的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}
查看完整描述

1 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

好吧,NewMagickWand()返回 a *MagickWand,因此您可以创建您的函数,例如:


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

}

然后调用者必须调用.Destroy(),例如:


func main() {

    mw := ObjImagick(bucketName, keyName, region)

    defer mw.Destroy()

}


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 168 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信