2

我正在尝试使用 sarama(管理员模式)来创建主题。没有 ConfigEntries 工作正常。但我需要定义一些配置。

我设置了主题配置(这里发生了错误):

    tConfigs := map[string]*string{
        "cleanup.policy":      "delete",
        "delete.retention.ms": "36000000",
    }

但后来我得到一个错误:

./main.go:99:28: cannot use "delete" (type string) as type *string in map value
./main.go:100:28: cannot use "36000000" (type string) as type *string in map value

我正在尝试像这样使用管理员模式:

err = admin.CreateTopic(t.Name, &sarama.TopicDetail{
    NumPartitions:     1,
    ReplicationFactor: 3,
    ConfigEntries:     tConfigs,
}, false)

这是定义 CreateTopic() https://github.com/Shopify/sarama/blob/master/admin.go#L18的 sarama 模块中的行

基本上,我不明白指针字符串的映射是如何工作的:)

4

1 回答 1

6

要使用复合文字初始化具有string指针值类型的映射,您必须使用指针值。文字不是指针,它只是一个值。stringstringstring

获取指向值的指针的一种简单方法是获取类型string变量的地址string,例如:

s1 := "delete"
s2 := "36000000"

tConfigs := map[string]*string{
    "cleanup.policy":      &s1,
    "delete.retention.ms": &s2,
}

为了方便多次使用,创建一个辅助函数:

func strptr(s string) *string { return &s }

并使用它:

tConfigs := map[string]*string{
    "cleanup.policy":      strptr("delete"),
    "delete.retention.ms": strptr("36000000"),
}

试试Go Playground上的示例。

在此处查看背景和其他选项:如何在 Go 中执行文字 *int64?

于 2019-06-19T08:39:15.583 回答