Home >Backend Development >Golang >Why Does My Go Interface Method Return Type Cause a Compilation Error?

Why Does My Go Interface Method Return Type Cause a Compilation Error?

Linda Hamilton
Linda HamiltonOriginal
2024-11-09 22:38:02798browse

Why Does My Go Interface Method Return Type Cause a Compilation Error?

Interface Method Return Type as an Interface in Go

Question:

Implementing an interface method that returns an interface type in Golang can lead to compilation errors. Consider the following code:

type IA interface {
    FB() IB
}

type IB interface {
    Bar() string
}

type A struct {
    b *B
}

func (a *A) FB() *B {
    return a.b
}

type B struct{}

func (b *B) Bar() string {
    return "Bar!"
}

Running this code results in the following error:

cannot use a (type *A) as type IA in function argument:
    *A does not implement IA (wrong type for FB method)
        have FB() *B
        want FB() IB

Solution:

To fix this issue, the return type of the FB method must match the type specified in the IA interface. Therefore, the following change is required:

func (a *A) FB() IB {
    return a.b
}

With this modification, the code will compile successfully because the return type of FB is now IB, as defined in the IA interface.

Additional Considerations:

If the IA and IB interfaces are defined in separate packages, the import statement for the package containing IB must be included in the file where the FB method is implemented. Additionally, the return type of FB must be qualified with the appropriate package name:

import (
    "foo" // Package containing IB interface
)

// Implementation in package bar
func (a *A) FB() foo.IB {
    return a.b
}

The above is the detailed content of Why Does My Go Interface Method Return Type Cause a Compilation Error?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn