코드 예제는 다음과 같습니다.
func main() { var a Integer = 1 var b Integer = 1 sum := a.Add(b) fmt.Println(sum) var i interface{} = a sum = i.(Integer).Add(b) // 报错 fmt.Println(sum) } type Integer int func (a *Integer) Add(b Integer) Integer { return *a + b }
오류 메시지는 다음과 같습니다.
test\testVar.go:16:19: cannot call pointer method on i.(Integer) test\testVar.go:16:19: cannot take the address of i.(Integer)
이는 Add 메서드에 Integer 포인터 유형의 수신기가 필요하고 i.(Integer)<가 필요하기 때문에 발생합니다. 우리가 전달한 /code>는 값이고, 이 값은 어떤 변수에도 할당되지 않으므로 "&" 기호는 주소를 얻을 수 없습니다. <code>i.(Integer)
是个值,且这个值也没有赋给任何变量,所以符号“&”是获取不到地址的。
正确的方式是将i.(Integer)
i.(Integer)
를 변수에 할당하거나 메소드 수신자를 일반 유형으로 변경하는 것입니다. 코드 예시는 다음과 같습니다: var i interface{} = a c := i.(Integer) sum = c.Add(b) fmt.Println(sum)
func (a Integer) Add(b Integer) Integer { return a + b }
위 내용은 golang에서 주소를 얻을 수 없는 문제 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!