I got a system that handles the resolving of resources (matching a name to a file path, etc). It parses a list of files and then keeps pointers to a function that returns an instance of an implementation of an interface.
It's easier to show.
resource.go
package resource
var (
    tex_types    map[string]func(string) *Texture = make(map[string]func(string) *Texture)
    shader_types map[string]func(string) *Shader  = make(map[string]func(string) *Shader)
)
type Texture interface {
    Texture() (uint32, error)
    Width() int
    Height() int
}
func AddTextureLoader(ext string, fn func(string) *Texture) {
    tex_types[ext] = fn
}
dds.go
package texture
type DDSTexture struct {
    path   string
    _tid   uint32
    height uint32
    width  uint32
}
func NewDDSTexture(filename string) *DDSTexture {
    return &DDSTexture{
        path:   filename,
        _tid:   0,
        height: 0,
        width:  0,
    }
}
func init() {
    resource.AddTextureLoader("dds", NewDDSTexture)
}
DDSTexture fully implements the Texture interface, I just omitted those functions because they're huge and not part of my question.
When compiling these two packages, the following error arises:
resource\texture\dds.go:165: cannot use NewDDSTexture (type func(string) *DDSTexture) as type func (string) *resource.Texture in argument to resource.AddTextureLoader
How would I resolve this problem, or is this a bug with the interface system?  Just reiterating: DDSTexture fully implements resource.Texture.