Из полезного - тяжелые структуры лучше выводить fmt.Print("%+v ", struct) - нагляднее И довольно важная ошибка, инициализация через new() создает сразу указатель на объект, а просто через var - объект
@@stanislavlalazaryan это ситуативная вещь. Иногда нам нужен именно nil, т.е. не инициализированный указатель. Но для краткости ответа скажу что "да", используйте инициализацию через new, чтобы избежать неожиданностей.
вот этот вывод, который демонстрировался: "{[{1 100} {2 101} {3 102}]}" не из этого примера, попробуйте всё, что в этом уроке перепечатать еще раз и вы не получите такого результата. Нужно внести сюда правки, иначе в заблуждение ролик вводит конкретно. Чтобы сделать такого рода вывод, - нужна другая структура: type customStruct struct { Markets []struct{ Name string Price int } }
@@BeGeek101 если в Name вместо типа string засунуть структуру status, как вы делаете в видео, то анмаршал для 'name' пройдет неудачно. Сам с этим столкнулся только что.
Спасибо вам, вы правы. Имена действительно если с типом стринг только выведутся. С типом другом структуры выведутся просто {} указывающие на другую структуру.
Так регистр имени структуры не важен при парсинге? 4:26 начинается с большой буквы Markets а в json он с маленькой. Или там пофигу что написано в json ? Хоть другое слово
А разве для разбора JSON не нужно указывать теги (подсказки) если в самом JSON они написаны с маленькой буквы, а в структуре должны быть с большой(Чтобы экспортились)? Типа вот так: type Mystruct struct { Name string `json:"name"` Price int `json:"price"` } Например тут это указано: gobyexample.com/json Only exported fields will be encoded/decoded in JSON. Fields must start with capital letters to be exported. А более подробно про структурные теги тут www.digitalocean.com/community/tutorials/how-to-use-struct-tags-in-go-ru
онлайн ресурсы трансформируют json в структуры как-то по другому например {"widget": { "debug": "on", "window": { "title": "Sample Konfabulator Widget", "name": "main_window", "width": 500, "height": 500 } }} превращается в type AutoGenerated struct { Widget struct { Debug string `json:"debug"` Window struct { Title string `json:"title"` Name string `json:"name"` Width int `json:"width"` Height int `json:"height"` } `json:"window"` } `json:"widget"` } так как правильно\принято в Го?
@@BeGeek101 я Го только начал учить по-этому не знаю как правильно. я просто к тому что у тебя в видео показан другой вид структуры, а онлайн сервисы генерит структуру по другому. но как я понял оба варианта работают, да?
Я ноль в программировании. И я не понимаю почему в срезе строка Name имеет структурный тип status { Name string}. Мы обращаемся к price как infos.Markets[i].Price, тогда мы должны обращаться к Name как infos.Markets[i].Name.Name должно быть по логике??? Если не прописывать второй Name то по логике должно выводиться на экрать так : 0 {1} 100 1 {2} 101 2 {3} 102
потому что структура status инкапсулировалась в другую структуру. На самом деле можно писать как вы сказали, предложенный вариант в видео - это такой синтаксический сахар
я об этом упомянул в видео. Вообще в продакшене у тебя такой ситуации не может быть, что ты не знаешь структуру json, которую должен парсить ) тебе всегда заранее известны ключи, значения которых тебе нужно достать. Если не известны, то сначала можно подглядеть и воспользоваться интерфейсами
Ещё как может быть такая ситуация. Ну или придётся в неудобную структуру данные конвертировать, если не умеешь со свободным словарём работать. вроде []{name string, value string}
Не очень удобно когда переменные name: "1,,,,2,3,4" если это name то называй его какой нибудь стрингой, а то кашеобразно получается, урок с картами там тоже самое ключ стринга "1" и в консоли то ли это индекс то ли это ключ. А так спасибо за уроки.
Разбор домашнего задания - boosty.to/begeek
Из полезного - тяжелые структуры лучше выводить fmt.Print("%+v
", struct) - нагляднее
И довольно важная ошибка, инициализация через new() создает сразу указатель на объект, а просто через var - объект
Тож заметил. За "%+v" спасибо! Правда, через Print не получилось, сделал через Sprintf.
подскажите, на практике через new () инициализировать лучше ? нежели делать объект как на видео,?
@@stanislavlalazaryan это ситуативная вещь. Иногда нам нужен именно nil, т.е. не инициализированный указатель. Но для краткости ответа скажу что "да", используйте инициализацию через new, чтобы избежать неожиданностей.
@@darkmatiz Ясно, Спасибо за разъяснения
вот этот вывод, который демонстрировался: "{[{1 100} {2 101} {3 102}]}" не из этого примера, попробуйте всё, что в этом уроке перепечатать еще раз и вы не получите такого результата. Нужно внести сюда правки, иначе в заблуждение ролик вводит конкретно. Чтобы сделать такого рода вывод, - нужна другая структура:
type customStruct struct {
Markets []struct{
Name string
Price int
}
}
не понял
только что глянул видео, там такая же структура под названием info
или я не понял коммента =(
@@BeGeek101 если в Name вместо типа string засунуть структуру status, как вы делаете в видео, то анмаршал для 'name' пройдет неудачно. Сам с этим столкнулся только что.
спс вам всем...учу с нуля....лицо уже упало перед монитором ибо упорно получалось
0 {} 100
1 {} 101
2 {} 102
блять, аллилуя
@@dronihash у вас неверный вывод. Комментатор сверху подсказал что нужно сделать, чтобы вывод был корректный.
Спасибо вам, вы правы. Имена действительно если с типом стринг только выведутся. С типом другом структуры выведутся просто {} указывающие на другую структуру.
Так регистр имени структуры не важен при парсинге? 4:26 начинается с большой буквы Markets а в json он с маленькой. Или там пофигу что написано в json ? Хоть другое слово
Спасибо, очень интересно и полезно!
спасибо за понятное объяснение)
А про интерфейс будет видео ? Очень нравиться как вы объясняете )
А разве для разбора JSON не нужно указывать теги (подсказки) если в самом JSON они написаны с маленькой буквы, а в структуре должны быть с большой(Чтобы экспортились)?
Типа вот так:
type Mystruct struct {
Name string `json:"name"`
Price int `json:"price"`
}
Например тут это указано:
gobyexample.com/json
Only exported fields will be encoded/decoded in JSON. Fields must start with capital letters to be exported.
А более подробно про структурные теги тут www.digitalocean.com/community/tutorials/how-to-use-struct-tags-in-go-ru
онлайн ресурсы трансформируют json в структуры как-то по другому
например
{"widget": {
"debug": "on",
"window": {
"title": "Sample Konfabulator Widget",
"name": "main_window",
"width": 500,
"height": 500
}
}}
превращается в
type AutoGenerated struct {
Widget struct {
Debug string `json:"debug"`
Window struct {
Title string `json:"title"`
Name string `json:"name"`
Width int `json:"width"`
Height int `json:"height"`
} `json:"window"`
} `json:"widget"`
}
так как правильно\принято в Го?
не понял вопроса, но выглядит правильно. Можно пойти разными путями, в зависимости от того, что требуется. Можно и через интерфейсы
@@BeGeek101 я Го только начал учить по-этому не знаю как правильно. я просто к тому что у тебя в видео показан другой вид структуры, а онлайн сервисы генерит структуру по другому. но как я понял оба варианта работают, да?
Я ноль в программировании. И я не понимаю почему в срезе строка Name имеет структурный тип status { Name string}. Мы обращаемся к price как infos.Markets[i].Price, тогда мы должны обращаться к Name как infos.Markets[i].Name.Name должно быть по логике??? Если не прописывать второй Name то по логике должно выводиться на экрать так :
0 {1} 100
1 {2} 101
2 {3} 102
потому что структура status инкапсулировалась в другую структуру. На самом деле можно писать как вы сказали, предложенный вариант в видео - это такой синтаксический сахар
Афигенная магия!
И где искать домашку в ВК????
Выворот мозга
если правильно понял, то работа с json и бд ведется по принципу codefirst? или не правильно я понял урок?)
не знаю что такое codefirst )
Интересно а как парсить json который заранее не известен
я об этом упомянул в видео. Вообще в продакшене у тебя такой ситуации не может быть, что ты не знаешь структуру json, которую должен парсить ) тебе всегда заранее известны ключи, значения которых тебе нужно достать. Если не известны, то сначала можно подглядеть и воспользоваться интерфейсами
Ещё как может быть такая ситуация. Ну или придётся в неудобную структуру данные конвертировать, если не умеешь со свободным словарём работать. вроде []{name string, value string}
@@vp_arthможешь любую структуру запихнуть в map[string]interface{}
Было бы интересно написать простенького чат бота в для телеграмм в сравнении на python(Flask) и на GO !!! Я думаю всем будет интересно.
будет в дальнейшем. Есть предложение параллельно делать уроки по питону и заодно сравнивать как оно выглядит на питоне и как на ГО
@@BeGeek101 интересненько)
А зачем нам структуры? какая та сложная тема, можем ли мы обойтись без него ?
Где его использовать ?
в Go нельзя без структур обойтись, точнее можно, но так никто не пишет =)
Почему так сложнооо???)
с джейсоном как то сложно))
Не очень удобно когда переменные name: "1,,,,2,3,4" если это name то называй его какой нибудь стрингой, а то кашеобразно получается, урок с картами там тоже самое ключ стринга "1" и в консоли то ли это индекс то ли это ключ. А так спасибо за уроки.
ну, извините) как получилось
я тут:)
получается? где доники? )