Da es keine Generika unterwegs sind, werden Sie noch Art Behauptungen zu tun haben, wenn Sie eine leere Schnittstelle verwenden, das heißt interface{}
.
Die beste Option besteht darin, eine Schnittstelle zu definieren, die alle benötigten Funktionen bereitstellt, und sie für alle Datentypen zu implementieren, die Sie umbrechen müssen.
package main
type SliceWrapper interface {
Slice(start, end int) SliceWrapper
Index(index int) int
}
func NewSlice(bitDepth int) SliceWrapper {
switch bitDepth {
case 8:
return make(Uint8Wrapper)
case 16:
return make(Uint16Wrapper)
}
}
type Uint8Wrapper []uint8
func (u Uint8Wrapper) Slice(s, e int) SliceWrapper {
return u[s:e]
}
func (u Uint8Wrapper) Index(i int) int {
return u[i]
}
type Uint16Wrapper []uint16
func (u Uint16Wrapper) Slice(s, e int) SliceWrapper {
return u[s:e]
}
func (u Uint16Wrapper) Index(i int) int {
return u[i]
}
Sie mehr Funktionalität benötigen, als dass ich sicher bin, aber es ist viel sauberer als interface{}
überall herum zu werfen.
Der deklarierte Typ einer Variablen kann nicht von den Laufzeitwerten abhängen. Sie sagen nicht, welches Problem Sie lösen möchten, aber https://godoc.org/image#Image ist wahrscheinlich relevant - auch wenn Sie Image nicht direkt verwenden können, kann der Quellcode nützlich sein. –
@PaulHankin Ich habe einen kurzen Blick auf das Bild-Paket, es sieht aus wie nur 8 Bit (Uint8) Pixeldaten unterstützen. Keine Lösung, um 10 Bits zu unterstützen. –