Golang不能将类型用作参数中的类型

时间:2018-09-04 22:14:57

标签: go interface

我是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 :(得分:2)

您不能像其他面向对象的语言那样在Go中执行此操作,因为Go不支持多态。如何使用T1接口作为ExportedFunction而不是S1的参数。 例 https://play.golang.org/p/72hgbSwNkaS