Сохранение чтения/записи/сохранения в json из структуры карты

Я пытался создать «рабочий» файл, в котором я сохраняю определенное базовое состояние своего приложения, а не храню их в Ram, поскольку их нужно сохранять каждый день, я решил создавать файл в день, эта часть работает, но я удалил его из кода для большей ясности.

Теперь я могу инициализировать свой файл с ложным значением для информационной структуры, а затем разбирать и читать из него.

Проблема возникает, когда я пытаюсь обновить «файл» после того, как он был рассортирован, прежде чем я сохраню его обратно в текстовый файл.

isImportStarted работает (при удалении ошибочной строки obv), но я не могу правильно обновить файл, я получаю эту ошибку:

./test.go:62:34: cannot assign to struct field 
TheList[symbol].ImportStarted in map
./test.go:71:3: cannot take the address of 
TheList[symbol].ImportStarted
./test.go:71:34: cannot assign to &TheList[symbol].ImportStarted

Мой код:

                package main

                import (
                    "encoding/json"
                    "fmt"
                    "os"
                    "io/ioutil"
                    "log"
                )

                type Informations struct {
                        ImportStarted bool
                        ImportDone bool
                }

                var MyList = map[string]*Informations{
                    "test": &Informations{ImportStarted: false,ImportDone:false},
                    "test2": &Informations{ImportStarted: false,ImportDone:false},
                }

                func ReadFile(filename string) []byte{
                    data, err := ioutil.ReadFile(filename)
                    if err != nil {
                        log.Panicf("failed reading data from file: %s", err)
                    }
                        return data
                }

                func writeFile(json string,filename string){
                        file, err := os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, os.ModeAppend)
                        defer file.Close()

                        if err != nil {
                            fmt.Println(err)
                        }
                        _,err2 := file.WriteString(json)
                        fmt.Println(err2)
                }

                func main() {
                        isImportStarted("test")
                        ImportStart("test")
                }

                func ImportStart(symbol string){
                  filename := "test.txt"
                    _, err := os.Stat(filename)
                    if err != nil {
                        if os.IsNotExist(err) {
                            fmt.Println("File does not exist creating it...")
                            file, err := os.Create(filename)
                            jsonString, _ := json.Marshal(MyList)
                            writeFile(string(jsonString),filename)
                            if err != nil {
                                fmt.Println(err)
                            }
                            fmt.Println("reading from file"+filename )
                            x := ReadFile(filename)

                            var TheList = map[string]Informations{}
                            json.Unmarshal(x,&TheList )
                            TheList[symbol].ImportStarted = true
                            defer file.Close()
                      //wanting to save afterwards...
                        }
                    } else {
                        fmt.Println("reading from file "+ filename)
                        x := ReadFile(filename)
                        var TheList = map[string]Informations{}
                        json.Unmarshal(x,&TheList )
                        &TheList[symbol].ImportStarted = true
                    }
                }


                func isImportStarted(symbol string) bool{
                    filename := "test.txt"
                    x := ReadFile(filename)
                    var TheList = map[string]Informations{}
                    json.Unmarshal(x,&TheList )
                    return TheList[symbol].ImportStarted
                }

Я пробовал вопрос Почему я получаю сообщение об ошибке «не могу назначить» при установке значения структуры в качестве значения на карте?, но он вообще не подходит для моего варианта использования, поскольку он эффективно инициализировал бы все мои структуры с помощью nil вместо {false, false}

Есть идеи?

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
0
335
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте var TheList = map[string]*Informations{}, почему вы не можете присвоить значение на карте, пожалуйста, обратитесь к почему я не получаю ошибку или доступ к структуре на карте без копирования

Другие вопросы по теме