繁体   English   中英

覆盖现有的 golang 结构并添加字段

Overwriting an existing golang structure and adding a field

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

    func (c *client) Init(conf config.Config, topic string) (err error) {
    defer func() {
        p := recover()
        switch v := p.(type) {
        case error:
            err = v
        }
    }()
    c.reader = kafka.NewReader(kafka.ReaderConfig{
        Brokers:               conf.Brokers,
        GroupID:               conf.GroupID,
        Topic:                 topic,
        MaxWait:               1 * time.Second,    // maximum time to wait for new messages
        MinBytes:              1,                  // minimum message size
        MaxBytes:              10e6,               // maximum message size 1 MByte (= maximum size Kafka can handle)
        RetentionTime:         time.Hour * 24 * 7, // keep ConsumerGroup for 1 week
        WatchPartitionChanges: true,               // watch for changes to the partitions (e.g. increase of partitions)
    })
    if conf.TlsEnabled {
        d := &kafka.Dialer{
            TLS: &tls.Config{},
        }
    }
    return err
}

长话短说:如果 TlsEnabled 为真,我想做的是将字段Dialer: d添加到c.reader c:reader 是 ReaderConfig 类型,在我的例子中已经包含 Dialer 字段:

    d := &kafka.Dialer{
    TLS: &tls.Config{},
    }
2 个回复

如果我正确理解了您的问题,那么当且仅当conf.TlsEnabled为真时,您才想在kafka.ReaderConfig上设置Dialer字段。 在这种情况下,您应该在调用kafka.NewReader之前移动您的if conf.TlsEnabled检查,并将kafka.ReaderConfig分配给一个变量,如下所示:

rConf := kafka.ReaderConfig{
    Brokers:               conf.Brokers,
    GroupID:               conf.GroupID,
    Topic:                 topic,
    MaxWait:               1 * time.Second,    // maximum time to wait for new messages
    MinBytes:              1,                  // minimum message size
    MaxBytes:              10e6,               // maximum message size 1 MByte (= maximum size Kafka can handle)
    RetentionTime:         time.Hour * 24 * 7, // keep ConsumerGroup for 1 week
    WatchPartitionChanges: true,               // watch for changes to the partitions (e.g. increase of partitions)
}
if conf.TlsEnabled {
    rConf.Dialer = &kafka.Dialer{
        TLS: &tls.Config{},
    }
}
// now assign c.reader
c.reader = kafka.NewReader(rConf)

只是一个小小的挑剔:在 golang 中,首字母缩写词和其他首字母缩写词应该全部大写。 您的配置类型不应该有一个名为TlsEnabled的字段,而应该是TLSEnabled

您不能将字段添加到现有类型,但可以将client嵌入自定义类型。 然后可以通过自定义类型直接访问这些字段

type myType struct {
    something string
    foo       int
    bar       int
}

type myExtendedType struct {
    myType
    dialer *kafka.Dialer
}

func main() {
    ext := myExtendedType{
        myType: myType{
            something: "some",
            foo:       24,
            bar:       42,
        },
        dialer: &kafka.Dialer{
            TLS: &tls.Config{},
        },
    }
    println(ext.something, ext.foo, ext.bar, ext.dialer)
}
1 在不破坏现有代码的情况下向结构添加字段

所以我正在使用这个巨大的代码库,并意识到其中一个结构缺少一个重要的领域。 我尽可能密切地查看代码(使用结构)并得出结论,添加一个额外的字段不会破坏它。 关于我可以搞砸的任何想法? 另外:欢迎设计建议 - 我能做到这一点的最佳方式是什么? 例如 (如果我不清楚): 现在 ...

2 添加行而不覆盖现有行

例如,我的DICT数据中有一些行。 我想更新其他模型中的记录行,并且我使用此代码。 其他模型记录有一些行初始化,我想从DATAS添加新行。 我的代码只会覆盖已经存在的行。 如何添加到现有行,而不覆盖? ...

3 mongoid - 覆盖现有的现场警告

我刚开始用mongodb。 我有一个使用mongodb通过mongoid(4.0.0)的rails 4.0应用程序有一个公司模型和一个用户模型。 所以用户belongs_to :company和公司has_many :users 当我启动控制台并且我做Company.first我得到了 ...

4 在自定义WordPress数据库表中的文本字段中添加新行,而不会覆盖现有值

我正在尝试在新行中将数据添加到自定义WordPress数据库表中的文本字段中,而不覆盖其中已经存在的值。 我认为它应该像这样: 获取该字段中当前的值,为其添加换行符,并连接到新值,并使用新值更新表字段。 问题是,我从表单中发布了新值。 我当前的代码如下所示: 我不 ...

5 将点添加到对象而不覆盖现有点

我正在尝试编写一个简单的程序,在该程序中,您将“收集”具有分数的不同对象,从而获得某种分数。 例如,“保时捷”将由用户确定一个点,如果您输入一个新点,则该点应添加到旧值上。 因此,假设您给“ Porsche” 100分,然后加50,总分应为150。该程序还应存储不同汽车的总分(因此,如果我给 ...

7 将数据添加到现有 JSON 文件而不覆盖它

想法: 我想将 JSON object 添加到现有的 JSON 文件中,但不覆盖文件中的现有数据。 uid-003 object 应该在现有的uid-xxx条目之后从属于uID 。 问题: 没有任何解决方案可以正常工作。 append()方法也返回错误: AttributeError: 'dic ...

8 添加新行而不覆盖现有行

我在将数据帧写入 csv 时遇到问题。 所以这是我的代码 因此,当我多次执行 python 脚本时,它会覆盖现有数据而不是创建新行。 每次执行python脚本时如何创建新行? 提前致谢 ! ...

9 在Haskell中添加列表/覆盖现有List的功能

我没有找到关于列表工作方式的一件事:是否有可能用insert中添加的条目覆盖现有的dict? 或者,在下一步中,是否有必要写出插入列出的列表? 到目前为止,这是我能够在不丢失之前条目的情况下向新列表添加内容的唯一方法。 但是,接下来要实现的东西是搜索命令,所以我想知道我是否还必须在 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM