1 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
你的大if ... else
結(jié)構(gòu)可以通過(guò)使用這樣的類(lèi)型開(kāi)關(guān)來(lái)簡(jiǎn)化:
您仍然需要列出所有可能的類(lèi)型,但這樣更好。
由于所有圖像實(shí)現(xiàn)都是具有名為 的字段的結(jié)構(gòu)指針Pix,因此您可以使用反射來(lái)獲取該字段。此實(shí)現(xiàn)將處理未來(lái)的圖像實(shí)現(xiàn)而無(wú)需任何更改(如果它們也將是具有Pix字段的結(jié)構(gòu))。
這就是它的樣子:
func getPix(img image.Image) ([]uint8, error) {
? ? v := reflect.ValueOf(img)
? ? if v.Kind() == reflect.Ptr {
? ? ? ? v = v.Elem()
? ? }
? ? if v.Kind() == reflect.Struct {
? ? ? ? pv := v.FieldByName("Pix")
? ? ? ? if pv.IsValid() {
? ? ? ? ? ? if pix, ok := pv.Interface().([]uint8); ok {
? ? ? ? ? ? ? ? return pix, nil
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? return nil, fmt.Errorf("unknown image type %T", img)
}
測(cè)試它:
fmt.Println(getPix(&image.NRGBA{}))
fmt.Println(getPix(&image.RGBA{}))
type unknownImage struct{ image.Image }
fmt.Println(getPix(unknownImage{}))
輸出(在Go Playground上嘗試):
[] <nil>
[] <nil>
[] unknown image type main.unknownImage
- 1 回答
- 0 關(guān)注
- 165 瀏覽
添加回答
舉報(bào)