Голанг не может использовать тип в качестве типа в аргументе - PullRequest
0 голосов
/ 05 сентября 2018

Я новичок в языке Go и пытаюсь ознакомиться с интерфейсами и их назначаемостью.

Я пытаюсь передать аргумент из struct в function, который импортируется из другого package.

main.go упаковка:

package main  

import {
  anotherPackage
}

type I1 interface {
  anotherPackage.I2
}

type T1 struct {
  *anotherPackage.S1
}

type T2 struct {
  variable1 T1
}

type T3 struct {
  variable2 T2
}

func handler() {
  var fromI I
  var input = T3{}

  template := fromI.ExportedFunction(input.T3.variable1)
}

func main() {
  handler()
}

anotherPackage.go пакет

package anotherPackage

type I2 interface {
  ExportedFunction(S1)
}

type S1 struct {
  Path string
  File string
}

type S2 struct {}

func (s2 *S2) ExportedFunction(s1 S1) {}

Я получаю сообщение об ошибке:

cannot use input.T3.variable1 (type T1) as type anotherPackage.S1 in argument to fromI.ExportedFunction

1 Ответ

0 голосов
/ 05 сентября 2018

Вы не можете сделать это в Go, как другие объектно-ориентированные языки, потому что Go не поддерживает полиморфизм. Как насчет использования интерфейса T1 в качестве параметра для ExportedFunction вместо S1. пример https://play.golang.org/p/72hgbSwNkaS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...