类型在Golang Api同类结构创建上发生冲突

问题描述

在client-go中创建types.go时遇到问题。

kind: Kafka
metadata:
  name: my-cluster
  namespace: sample-system
spec:
  kafka:
    version: 2.5.0
    replicas: 3
    listeners:
      plain:
        authentiation:
          type: scram-sha-512
      tls:
        authentiation:
          type: tls

按照以下种类“卡夫卡” ...

我对Kafka Kind的了解如下所示


// Kafka is the Schema for the kafkas API
type Kafka struct {
    metav1.TypeMeta   `json:",inline"`
    metav1.ObjectMeta `json:"metadata,omitempty"`
    Spec   KafkaSpec   `json:"spec,omitempty"`
    Status KafkaStatus `json:"status,omitempty"`
}

当我需要定义Spec.kafka类型时

// KafkaSpec defines the desired state of KafkaBundle
type KafkaSpec struct {
    // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
    // Important: Run "make" to regenerate code after modifying this file
    Kafka          *Kafka      `json:"kafka"`
    
    // Foo is an example field of Kafka. Edit Kafka_types.go to remove/update
    Foo string `json:"foo,omitempty"`
}

我遇到两种kafka结构类型的问题。这是错误的。

解决方法

您的结构Kafka具有从属结构KafkaSpec,而您的结构KafkaSpec依赖于结构Kafka。如果您研究结构,则将创建循环依赖关系,这在这里可能是个问题。我建议遵循以下结构,

主结构Kafka

// Kafka is the Schema for the kafkas API
type Kafka struct {
    metav1.TypeMeta   `json:",inline"`
    metav1.ObjectMeta `json:"metadata,omitempty"`
    Spec   KafkaSpec   `json:"spec,omitempty"`
    Status KafkaStatus `json:"status,omitempty"`
}

结构SpecKafka的子代。

// Spec defines the desired state of KafkaBundle
type Spec struct {
    // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
    // Important: Run "make" to regenerate code after modifying this file
    Kafka          *KafkaSpec      `json:"kafka"`
    
    // Foo is an example field of Kafka. Edit Kafka_types.go to remove/update
    Foo string `json:"foo,omitempty"`
}

结构KafkaSpec的子级Spec

type KafkaSpec struct {
    Replicas int `json:"replicas"`
    Listeners *Listners
}

类似地为PlainAuthentication创建一个结构。

我希望这可以解决您的问题。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...