Как использовать карту [строка] * строка - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь использовать сараму (режим администратора) для создания темы.Без 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)

Вот строка из модуля sarama, который определяет CreateTopic () https://github.com/Shopify/sarama/blob/master/admin.go#L18

По сути, я не сделалне понимаю, как работает карта строк-указателей:)

1 Ответ

5 голосов
/ 19 июня 2019

Чтобы инициализировать карту, имеющую тип значения указателя string, с составным литералом , необходимо использовать значения указателя string. Литерал string не является указателем, это просто значение string.

Простой способ получить указатель на значение 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 .

См. Фон и другие параметры здесь: Как мне сделать литерал * int64 в Go?

...