当前位置: 首页 > 面试题库 >

如何在Kubernetes代码中满足&deployment满足类型runtime.Object?

岳佐
2023-03-14
问题内容

kubectl/run.goKubernetes代码中,该Generate函数具有以下两种类型的结果列表:

runtime.Object, error

该函数的最后一行是:

return &deployment, nil

runtime 进口:

k8s.io/apimachinery/pkg/runtime

runtime通过go get在该import语句上运行而得到,对象在中定义interfaces.go

type Object interface {
    GetObjectKind() schema.ObjectKind
    DeepCopyObject() Object
}

(并且我在这里在网上找到了相同的代码。)

地址运算符会创建一个指针…更具体地说,Go规范指出:

对于类型T的操作数x,地址操作&x生成指向 T的类型 T的指针。

和指针的类型不同于其基本类型:

指针类型表示指向给定类型的变量的所有指针的集合,称为指针的基本类型。

如何&deployment满足runtime.Object类型?

我最好的猜测,到目前为止是deployment实现了runtime.Object接口,并映射&deploymentruntime.Object满足可转让的这条规则:

T是接口类型,并且x实现T。

在这方面,映射到结果列表类型的return语句语句等效于赋值。这样对吗?如果没有,规范或文档中是否还有其他部分对此进行了说明?


问题答案:

deployment 是局部变量,其声明:

deployment := extensionsv1beta1.Deployment{
    // ...
}

extensionsv1beta1从哪里进口:

import (
    // ...
    extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
    // ...
)

的文档extensionsv1beta1.Deployment。其定义是:

type Deployment struct {
    metav1.TypeMeta `json:",inline"`
    // ...other fields...
}

它嵌入了metav1.TypeMeta,它有一个GetObjectKind()带有指针接收器的方法。这意味着指向的指针Deployment也具有此方法,因为Spec:Struct类型:

给定一个结构类型S和一个定义的类型T,提升的方法包括在该结构的方法集中,如下所示:

  • 如果S包含嵌入式字段T,则S和的方法集*S都包括带有接收方的提升方法T
    方法集*S还包括带有接收方的提升方法*T


Deployment具有“直接”
DeepCopyObject()方法,再次使用指针接收器。因此,设置方法的*Deployment包含此方法。

最后引用Spec:接口类型:

接口类型指定一个称为其 接口 的方法集。
接口类型的变量可以使用方法集合存储任何类型的值,该方法集是接口的任何超集。* 据说这种类型 实现了接口 。 __ * __

因此,这意味着的方法集*Deployment具有定义的所有方法Object,或换句话说:的方法集*Deployment是的方法集的超集Object,因此*Deployment实现Object

deployment是类型的extensionsv1beta1.Deployment,这意味着&deployment类型*extensionsv1beta1.Deployment,我们在上面展示了它的实现Object;
因此,该值&deployment可以分配给或存储在type变量中Object



 类似资料:
  • 我们提供了邀约券和出行券两类券种,助力您的业务增长,升级客户服务。通过这两类券种,可实现客户到店体验、会员增值服务、积分礼品兑换等多种场景,并支持券面内容企业自由定制,真正地实现预算可控,帮助企业高效管理。

  • 我觉得我一定忽略了什么。 null Grunt@0.4.2应该匹配所有这些依赖项,但npm说它不匹配,安装失败。我是不是忽略了什么? 根据请求,我的package.json文件:

  • 我正在尝试使用boto构建DynamoDB表,这将在表中保存IAM策略的各个方面。我已经为keyschema定义了属性,我不理解错误。我对DYanmoDB和AWS非常陌生。这是我的代码: 这就是我得到的错误: botocore.exceptions.ClientError:调用CreateTable操作时发生错误(ValidationException):检测到1个验证错误:值'[com.amaz

  • 在编写实现类文件接口的类时,我们可以从模块继承一个抽象基类,例如,如图所示,使迭代器在Python中表现得像类文件对象。 另一方面,在类型注释中,我们应该使用从<code>类型派生的类。IO</code>(例如<code>TextIO</code>)表示这样的对象,如文件或类文件对象的类型提示所示?或io的类型检查问题。联合中的TextIOBase。 然而,这似乎并不像我预期的那样有效: 在这段代

  • pip识别全局安装的软件包-( 我用VirtualVWrapper预激活钩子清理蟒蛇, 然后echo$PYTHONPATH返回空字符串,但这没有帮助。 发生了什么?

  • 问题内容: 给出以下Go代码示例: 我可以使用tourGuide类型的变量或指向tourGuide的指针来调用结构的两个方法。换句话说,我可以使用类型为或的变量来使用Receiver 调用方法。类似地,我可以调用一个方法使用类型的变量接收机(如果是可寻址的)或。我了解编译器会在此处处理这些差异(请参见代码中的注释)。 但是,当我们实现接口时,情况会发生变化。在上面的代码中,类型为interface