Anonymous
Сейчас на пастебин кину
Anonymous
https://pastebin.com/qXep7XXt
Anonymous
нужно в a.Name получить значения
Anonymous
Наверное я что-то еще не понял как работать со структурами, решим массив вернуть.
Anonymous
https://pastebin.com/qXep7XXt
тебе нужно из main получить utils.a?
Anonymous
тебе нужно из main получить utils.a?
ну я уже через массив сделал, но да, был нужен)
Anonymous
с большой буквы нужно называть переменные, которые хочешь сделать доступными из других пакетов
Anonymous
тогда utils.A было бы доступно
Anonymous
Кто знает если книга Building Microservices with Go на русском?
dukeBarman
Врядли
Valentin
Читайте в оригинале
Максим
Подскажите, как можно перебрать слайс по ссылке? Типа такого: import "fmt" func main() { a := new([10]int) for _,v := range a { fmt.Println(v) } } Ошибка: cannot range over a (type *[10]int)
Diasko
for _,v := range *a { fmt.Println(v) }
Максим
panic: runtime error: invalid memory address or nil pointer dereference
Максим
на эту строку и ругается, где range *
Oleg
Указатель на слайс нулевой, range тут ни при чем :)
Diasko
https://play.golang.org/p/R70EoOP9xi ошебок нету
Ivahaev
Второе — new возвращает указатель на созданный элемент. Вероятно, тут попутано с make?
Peter
https://play.golang.org/p/VCQgsaEb3c код без изменений, оба варианта работают и вообще-то new([10]int) создаёт не слайс, а ссылку на массив из 10 элементов
Peter
И вообще, может это опять тот чувак вернулся и тролит глупыми вопросами
Максим
По ссылке сделать range можно? Вот в чем вопрос...
Anonymous
можно
Anonymous
слайс это и так ссылка всегда
Anonymous
хоть по ссылке, хоть без
Максим
Со звездочкой не работает... Что массив, что слайс
Anonymous
ну потому что массив это уже указатель (и слайс)
Anonymous
и через new и через make и через var x []Type
Максим
Тоесть, я попытался сделать ссылку на ссылку?
Максим
И звездочка там вообще не нужна
Anonymous
хуже, ты попытался в range взять значение первого элемента
Anonymous
&var - взятие ссылки, *var - получение значения по ссылке
Anonymous
Ссылка на ссылку будет &([]Type{....})
Максим
Ну, я все равно не оч понял) но спасибо, попробую разобраться
Anonymous
если коротко - убрать надо звездочку в range
Anonymous
Ну, я все равно не оч понял) но спасибо, попробую разобраться
https://nanxiao.gitbooks.io/golang-101-hacks/content/posts/the-internals-of-slice.html вот тут впринципе в первом абзаце все можно понять
Vasily
https://blog.golang.org/go-slices-usage-and-internals вот тут много про слайсы написано
Anonymous
Здрасти
Anonymous
Помогите пожалуйста
Anonymous
https://ru.stackoverflow.com/questions/713777/golang-xml-encoding-windows-1251
Vasily
А в чем отличие от того чтобы парсить сконверченный файл ?
Vasily
Есть вариант заменить только кодировку в хедере ( если только контент в 1251 ), а остальное интерпретировать уже после парсинга в слайс байт. Но это костыль
Anonymous
А в чем отличие от того чтобы парсить сконверченный файл ?
он его отказывается парсить если кодировка cp1251
Vasily
ну я понимаю
Anonymous
Пересобрал в ручную, указал Utf8 тогда норм парсит
Vasily
после конвертации кодировки парсить - не подходит ?
Vasily
ты же читаешь и так в память его весь
Vasily
в смысле после конвертации файла
Anonymous
после конвертации кодировки парсить - не подходит ?
подойтет наверное., но не пойму как это сделать
Vasily
утф для хмл - стандарт, это не единственный парсер который откается с другой кодировкой работатть
Vasily
тогда гугли по convert encoding
Vasily
или где-т ов чате я видел упоминания iconv
Anonymous
да уже пальцы стер от Клавы, чет вообще не могу понять
Vasily
а файл реально в какой кодировке?
Vasily
не то что там написано в заголовке, а по факту
Vasily
ну конверть
Anonymous
Я чуть не заплакал когда увидел)
Vasily
да брось, обычное дело
Ngoro
Был у меня подобная проблема. Я решил ее путем конвертации cp1251 -> utf-8, затем я просто вырезал инструкцию <?xml version="1.0" encoding="windows-1251"?> перед вызовом xml.Unmarshal ... Правда это было давно. Такой костыль
Anonymous
Ngoro
я вырезал регуляркой с тем условием, что инструкция <?xml .... был в одну строку:
Ngoro
import "golang.org/x/net/html/charset" ... bodyReader, err := charset.NewReader(resp.Body, resp.Header.Get("Content-Type")) if err != nil { log.Fatal(err) } body, err := ioutil.ReadAll(bodyReader) if err != nil { log.Fatal(err) } ... // вырезаем инструкцию <?xml version="1.0" encoding="windows-1251"?> // - мешает обработке re := regexp.MustCompile((<\?xml\s+.+?\?>)) bodyText := re.ReplaceAllString(string(body), "") var checkResult CheckResult xml.Unmarshal([]byte(bodyText), &checkResult) if err != nil { log.Fatal(err) } log.Println(checkResult)
Ngoro
ну там быди небольшого размера xml-ки, так что я решил не заморчиваться
Anonymous
у меня 140 штук на 500мб
Ngoro
уууу, по 500 мб... надо что-то получше придумать тогда :(
Anonymous
Да, написал метод для перекодировки 1251 в utf8, но работает если только строка <?xml version="1.0" encoding="windows-1251"?> отсутствует
ros
если файлами лежат кортеж cat | sed | iconv
ros
ну и в цикл по ls обернуть
Anonymous
ну и в цикл по ls обернуть
Ну этот вариант не лучше ведь чем через regex, или я чего-то не понимаю?
ros
ща сочиню кортеж
Anonymous
ща сочиню кортеж
Ок, был бы очень признателен
ros
for OUTPUT in $(ls *.xml) do cat $OUTPUT |\ sed 's/encoding="windows-1251"/encoding="utf-8"/' |\ iconv -f cp1251 -t utf8 -o $OUTPUT.utf8.xml done
ros
более безопасный вариант с однократной заменой for OUTPUT in $(ls *.xml) do cat $OUTPUT |\ sed '0,/encoding="windows-1251"/s/encoding="windows-1251"/encoding="utf-8"/' |\ iconv -f cp1251 -t utf8 -o $OUTPUT.utf8.xml done