Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 指针接收器中的未解析类型_Go - Fatal编程技术网

Go 指针接收器中的未解析类型

Go 指针接收器中的未解析类型,go,Go,我在一个名为lib的库中输入了Process 我正在尝试从libpackage导入该库并添加一个与type关联的方法 func(p *lib.Process) DoSomething(pp *lib.Process) 但是我在func(…)的内部有一个错误未解析的类型'lib'。这让我很惊讶,因为DoSomething里面没有错误 如何克服它?您不能在另一个包中扩展现有类型。您可以定义自己的类型或子包,如下所示 type LibProcess lib.Process func(p *Lib

我在一个名为
lib
的库中输入了
Process

我正在尝试从
lib
package导入该库并添加一个与type关联的方法

func(p *lib.Process) DoSomething(pp *lib.Process) 
但是我在
func(…)
的内部有一个错误
未解析的类型'lib'
。这让我很惊讶,因为DoSomething里面没有错误


如何克服它?

您不能在另一个包中扩展现有类型。您可以定义自己的类型或子包,如下所示

type LibProcess lib.Process

func(p *LibProcess)DoSomething(pp *LibProcess) {}

类型别名与定义

type LibProcess lib.Process // type defintion

type LibProcess = lib.Process // type alias
  • 类型定义创建一个与给定类型具有相同基础类型和操作的新的、不同的类型,并将标识符绑定到该类型

  • 别名声明将标识符绑定到给定类型


您不能扩展其他包中定义的类型。您可以做的是在您自己的类型中的另一个包中嵌入一个类型,然后扩展您自己的类型。例如:

type MyProcess struct {
    lib.Process
}

func (p *MyProcess) DoSomething(...) {
    // ...
}

使用此方法,
lib.Process
上的所有现有方法以及您自己的方法仍然可以访问。

“…由T表示的类型称为接收器基类型;它不能是指针或接口类型,并且必须在与方法相同的包中定义…”
LibProcess
不是用于
lib.Process
LibProcess
是一种新类型,它与
lib.Process
共享一个基类型
LibProcess
没有任何
lib.Process
方法。别名不允许这样做。只有一个全新的类型才会出现。@ThunderCat感谢您纠正我的错误,我误解了
别名
。类型定义没有固有的方法(这似乎就是您所说的“和操作”)。你需要一个嵌入式。