Сообщения в Вопрос по golang

Вопрос по golang

Есть затея сохранять слайс из структур в файл:
package main

import (
    "encoding/gob"
    "os"
    "fmt"
)

type count struct {
    echo string
    count int
}

func main() {
    d := []count{{"bash.rss", 100}, {"pipe.2032", 200}}
    fmt.Println(d)
    f, _ := os.Create("slice")
    encoder := gob.NewEncoder(f)
    encoder.Encode(d)
    f.Close()
}
Файл вполне себе создаётся.

А вот считать из этого файла у меня не выходит:
package main

import (
    "os"
    "encoding/gob"
    "fmt"
)

type count struct {
    echo string
    count int
}

func main() {
    d := []count{}
    f, _ := os.Open("slice")
    encoder := gob.NewDecoder(f)
    _ = encoder.Decode(d)
    fmt.Println(d)
    f.Close()
}
В итоге в d после декодирования вижу пустой слайс. Что я делаю не так?
Andrew Lobanov to All (2017-09-15 08:49:01) [ссылка]

Re: Вопрос по golang

Ответ на сообщение
Сделай так
type count struct {
    echo string `json:"echo"`
    count int `json:"count"`
}
Потом маршаль его и пиши в файл json. После считывания анмаршал делай.
var c []count
err := json.Unmarshal(data, &c)
Difrex to Andrew Lobanov (2017-09-15 12:53:50) [ссылка]

Re: Вопрос по golang

Ответ на сообщение
Тут ссылку нужно передать
_ = encoder.Decode(&d)
Difrex to Andrew Lobanov (2017-09-15 13:04:45) [ссылка]

Re: Вопрос по golang

Ответ на сообщение
Не прочитал код сначала =)

Игнорируй пост про жсон
Difrex to Difrex (2017-09-15 13:05:49) [ссылка]

Re: Вопрос по golang

Ответ на сообщение
Ну и ошибку лучше обрабатывать все же.
Difrex to Difrex (2017-09-15 14:55:49) [ссылка]

Re: Вопрос по golang

Ответ на сообщение
Difrex> Потом маршаль его и пиши в файл json. После считывания анмаршал делай.
json у меня как крайний вариант.
Andrew Lobanov to Difrex (2017-09-16 11:33:00) [ссылка]

Re: Вопрос по golang

Ответ на сообщение
Difrex> Тут ссылку нужно передать
Difrex> _ = encoder.Decode(&d)
Да. Я там нагуглил потом. Но один фиг пустой слайс на выходе.
Andrew Lobanov to Difrex (2017-09-16 11:33:00) [ссылка]

Re: Вопрос по golang

Ответ на сообщение
Difrex> Ну и ошибку лучше обрабатывать все же.
Это тестовый пример. В ошибку попадает EOF, так что заведомо всё нормально. Вот поему слайс пустой я не пойму.
Andrew Lobanov to Difrex (2017-09-16 11:33:01) [ссылка]

Re: Вопрос по golang

Ответ на сообщение
А какая версия го?

Вечером попробую у себя воспроизвести.

ЗЫ: приехал в Москву. Отвык я уже от метро 😀
Difrex(mobile) to Andrew Lobanov (2017-09-16 11:50:17) [ссылка]

Re: Вопрос по golang

Ответ на сообщение
Difrex(mobile)> А какая версия го?
1.9
Difrex(mobile)> Вечером попробую у себя воспроизвести.
Буду признателен.
Difrex(mobile)> ЗЫ: приехал в Москву. Отвык я уже от метро.
А я ни разу на метро не ездил. В Екатеринбурге, когда ездил на курсы по MS SQL Server, на нём можно было доехать от вокзала до гостинницы и обратно, но я предпочёл лишний ачсок пешком прогуляться.
Andrew Lobanov to Difrex(mobile) (2017-09-16 14:12:36) [ссылка]

Re: Вопрос по golang

Ответ на сообщение
Тут пешочком не прогуляться. Мне от дома до дома родителей час на машине ехать. Вот еду обратно в метро. Метро быстро!
Difrex(mobile) to Andrew Lobanov (2017-09-16 17:10:37) [ссылка]

Re: Вопрос по golang

Ответ на сообщение
Вот так вот работает все
package main

import (
	"encoding/gob"
	"fmt"
	"os"
)

type Count struct {
	Echo  string
	Count int
}

func main() {
	d := []Count{{"eee", 1}}
	f, _ := os.Create("slice")
	enc := gob.NewEncoder(f)
	enc.Encode(d)
	f.Close()

	var c []Count
	s, _ := os.Open("slice")
	dec := gob.NewDecoder(s)
	dec.Decode(&c)
	defer s.Close()
	fmt.Println(c)
}
go build
./test 
[{eee 1}]

Difrex to Andrew Lobanov (2017-09-16 20:25:58) [ссылка]

Re: Вопрос по golang

Ответ на сообщение
Чтобы считать из файла структура и поля у нее должны быть экспортированы https://blog.golang.org/gobs-of-data
Difrex to Difrex (2017-09-16 20:27:33) [ссылка]

Re: Вопрос по golang

Ответ на сообщение
Difrex> Чтобы считать из файла структура и поля у нее должны быть экспортированы https://blog.golang.org/gobs-of-data
Да. Дело оказалось именно в этом. Спасибо за помощь.
Andrew Lobanov to Difrex (2017-09-17 07:59:07) [ссылка]