gpt4 book ai didi

go - 了解 gometalinter unconvert 不必要的转换警告

转载 作者:数据小太阳 更新时间:2023-10-29 03:14:36 25 4
gpt4 key购买 nike

警告:不必要的转换(unconvert)

这来自以下行:

offsetY += 60 + image.Image(*img.Bitmap).Bounds().Max.Y

我花了一段时间才明白如何将此接口(interface)指针转换为接口(interface),但我认为这不是正确的解决方案,因为 gometalinter 会发出警告。

我想获取 img 的宽度。imgImage 结构,并且有一个指向真实 image.Image(图像标准库)的位图指针。如果我想在实际的 image.Image 上调用 Bounds,我需要将指向接口(interface)的指针转换为接口(interface)。

应该如何以更友好的方式完成?

我有以下代码:

import (
"image"
"image/color"
"image/draw"
)
type Image struct {
Src string
Title string
Width int
Height int
Index int
Bitmap *image.Image
}

type Images []Image

offsetY = 10
func ComposeImage(imgs Images) image.Image {
masterRGBAImg := image.NewRGBA(image.Rect(0, 0, 300, 300))
masterBounds := masterRGBAImg.Bounds()

for _, img := range imgs {
draw.Draw(masterRGBAImg, masterBounds,
*img.Bitmap, image.Point{X: -10, Y: -offsetY + 10}, draw.Src)


addLabel(masterRGBAImg, 10, offsetY-30, img.Title)

// HERE ======
offsetY += 60 + image.Image(*img.Bitmap).Bounds().Max.Y
// END ======

}
return masterRGBAImg
}

// Draw label on image.
func addLabel(img *image.RGBA, x int, y int, label string) {
col := color.RGBA{50, 50, 50, 255}
point := fixed.Point26_6{X: fixed.Int26_6(x * 64), Y: fixed.Int26_6(y * 64)}

d := &font.Drawer{
Dst: img,
Src: image.NewUniform(col),
Face: inconsolata.Bold8x16,
Dot: point,
}
d.DrawString(label)
}

最佳答案

首先,位图字段是一个*image.Image,所以它是同一类型,当您可以取消引用时不需要转换它。

(*img.Bitmap).Bounds()

但是,image.Image 是一个接口(interface)。指向接口(interface)的指针几乎总是编程错误。

将您的结构定义更改为

type Image struct {
Src string
Title string
Width int
Height int
Index int
Bitmap image.Image
}

然后您可以直接调用 img.Bitmap.Bounds()

关于go - 了解 gometalinter unconvert 不必要的转换警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40142146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com