невозможно присвоить структуре поля в карте - PullRequest
0 голосов
/ 07 мая 2018

Я хотел бы установить значение по умолчанию, и если оно не задано в структуре, я бы хотел установить его. Это немного сбивает с толку, но, пожалуйста, взгляните на (упрощенный) код:

package main

import "log"

type Something struct {
    A string
    B map[string]Type
    C Epyt
}
type Type struct {
    A Epyt
    B string
}

type Epyt struct {
    A string
    B string
}

func main() {
    var a Something
    a.A = "Test A (Something)"
//  var a.B["one"] Type
    a.B["one"].A.A = a.B["one"].A.A
    a.B["one"].A.A = "Test A ([one]Type.Epyt)"
    a.B["two"].A.A = "Test A ([two]Type.Epyt)"  
    a.C.A = "Test A (Epyt)"
    a.C.B = "Test B (Epyt)"

    for i := range a.B {
        if a.B[i].A.B == "" {
            a.B[i].A.B = a.C.B
        }
    }
    log.Printf("%+v", a)
}

Я работаю с viper, чтобы демонтировать файл конфигурации, поэтому я не могу использовать указатели (или я ошибаюсь?).

Я получаю сообщение об ошибке: невозможно присвоить поле структуры *** на карте.

Я обнаружил, что это старая ошибка в go lang, все еще не исправленная.

Я прочитал Почему я получаю сообщение об ошибке "невозможно присвоить" при установке значения для структуры в качестве значения на карте? и Голанг: У меня есть карта структур. Почему я не могу напрямую изменить поле в значении структуры? , но, как я уже сказал, я не могу работать с указателями (или?), Поэтому, пожалуйста, не отмечайте это как дубликат, поскольку это не так!

Если у кого-то есть идеи, как это правильно сделать, пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Вы не инициализировали карту.

Попробуйте

var a Something
a.B = make(map[string]Type)

Кроме того, ни одна из структур, на которые вы ссылаетесь, не существует.

То есть вместо:

a.B["one"].A.A = ...

Вы должны сделать:

a.B["one"] = Type{
    A: Epyt{
        A: "test",
        B: "foo",
    },
    B: "something",
}
0 голосов
/ 08 мая 2018

Я немного поиграл и все заработало! Я думал, что есть ошибка, потому что, если я использую printf по всей структуре, я получу адрес вместо значения. Приносим извинения за неудобства!

Как сказал мне @mkopriva, я пытался использовать указатели. После некоторых ошибок я заставил это работать до сих пор! Разобрался с этим багом мозга;)

Еще раз спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...