了解接口中的接口(嵌入式接口)
Understanding interface inside interface(Embedded Interface)
我试图通过以下代码理解接口嵌入。
我有以下内容:
type MyprojectV1alpha1Interface interface {
RESTClient() rest.Interface
SamplesGetter
}
// SamplesGetter has a method to return a SampleInterface.
// A group's client should implement this interface.
type SamplesGetter interface {
Samples(namespace string) SampleInterface
}
// SampleInterface has methods to work with Sample resources.
type SampleInterface interface {
Create(*v1alpha1.Sample) (*v1alpha1.Sample, error)
Update(*v1alpha1.Sample) (*v1alpha1.Sample, error)
Delete(name string, options *v1.DeleteOptions) error
DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error
Get(name string, options v1.GetOptions) (*v1alpha1.Sample, error)
List(opts v1.ListOptions) (*v1alpha1.SampleList, error)
Watch(opts v1.ListOptions) (watch.Interface, error)
Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.Sample, err error)
SampleExpansion
}
现在如果我有以下内容:
func returninterface() MyprojectV1alpha1Interface {
//does something and returns me MyprojectV1alpha1Interface
}
temp := returninterface()
现在,如果我想从 MyprojectV1alpha1Interface 调用
Create function of SampleInterface
我需要做什么?
另外,请解释一下这个接口在 Golang 中是如何工作的。
在此定义中:
type MyprojectV1alpha1Interface interface {
RESTClient() rest.Interface
SamplesGetter
}
您的 MyprojectV1alpha1Interface
嵌入了 SamplesGetter
界面。
将一个接口嵌入另一个接口意味着嵌入接口 (SamplesGetter
) 的所有方法都可以通过嵌入接口 (MyprojectV1alpha1Interface
) 调用。
这意味着您可以在任何实现 MyprojectV1alpha1Interface
.
的对象上调用任何 SamplesGetter
方法
所以一旦你在你的 temp
变量中得到一个 MyprojectV1alpha1Interface
对象,你就可以调用 Samples
方法(使用合适的 namespace
,我无法从您发布的代码):
sampleInt := temp.Samples("namespace here")
sampleInt
将有一个 SampleInterface
对象,因此您可以使用 sampleInt
变量调用 Create
函数:
sample, err := sampleInt.Create(<you should use a *v1alpha1.Sample here>)
有关接口如何工作的更多详细信息,我建议您查看官方规范和示例:
我试图通过以下代码理解接口嵌入。
我有以下内容:
type MyprojectV1alpha1Interface interface {
RESTClient() rest.Interface
SamplesGetter
}
// SamplesGetter has a method to return a SampleInterface.
// A group's client should implement this interface.
type SamplesGetter interface {
Samples(namespace string) SampleInterface
}
// SampleInterface has methods to work with Sample resources.
type SampleInterface interface {
Create(*v1alpha1.Sample) (*v1alpha1.Sample, error)
Update(*v1alpha1.Sample) (*v1alpha1.Sample, error)
Delete(name string, options *v1.DeleteOptions) error
DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error
Get(name string, options v1.GetOptions) (*v1alpha1.Sample, error)
List(opts v1.ListOptions) (*v1alpha1.SampleList, error)
Watch(opts v1.ListOptions) (watch.Interface, error)
Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.Sample, err error)
SampleExpansion
}
现在如果我有以下内容:
func returninterface() MyprojectV1alpha1Interface {
//does something and returns me MyprojectV1alpha1Interface
}
temp := returninterface()
现在,如果我想从 MyprojectV1alpha1Interface 调用
Create function of SampleInterface
我需要做什么?
另外,请解释一下这个接口在 Golang 中是如何工作的。
在此定义中:
type MyprojectV1alpha1Interface interface {
RESTClient() rest.Interface
SamplesGetter
}
您的 MyprojectV1alpha1Interface
嵌入了 SamplesGetter
界面。
将一个接口嵌入另一个接口意味着嵌入接口 (SamplesGetter
) 的所有方法都可以通过嵌入接口 (MyprojectV1alpha1Interface
) 调用。
这意味着您可以在任何实现 MyprojectV1alpha1Interface
.
SamplesGetter
方法
所以一旦你在你的 temp
变量中得到一个 MyprojectV1alpha1Interface
对象,你就可以调用 Samples
方法(使用合适的 namespace
,我无法从您发布的代码):
sampleInt := temp.Samples("namespace here")
sampleInt
将有一个 SampleInterface
对象,因此您可以使用 sampleInt
变量调用 Create
函数:
sample, err := sampleInt.Create(<you should use a *v1alpha1.Sample here>)
有关接口如何工作的更多详细信息,我建议您查看官方规范和示例: