@gogolang

Страница 1476 из 1630
Никита
28.09.2018
19:43:00
Кстати вот есть репозиторий с методами обращения к БД

Кому тут правильнее указывать эти методы, указателю на репу, или просто репе?

типа func (db Database) GetUserById(id int) (models.User, error) или же func (db *Database) GetUserById(id int) (models.User, error)

anatolii
28.09.2018
19:50:52
типа func (db Database) GetUserById(id int) (models.User, error) или же func (db *Database) GetUserById(id int) (models.User, error)
Правильно зависит от задачи, если тебе надо менять db из метода, то второй вариант, если нет, то любой (первый если точно не хочешь чтоб db изменился)

Google
anatolii
28.09.2018
19:53:02
тогда без разницы, ставьте *, бд передастся по ссылке, сэкономите память и время на копирование структуры

Dk
28.09.2018
20:11:08
Простите. Если я в пакете делаю func init() { var X int }, то экспортировать я X смогу или он в области видимости функции только?

anatolii
28.09.2018
20:12:47
в функции

Dk
28.09.2018
20:14:19
Ну вот хочу в инициализации прочитать json в структуру, чтобы потом экспортировать эту структуру.

Объявить переменную внешне и анмаршалить по указателю?

anatolii
28.09.2018
20:15:29
var X int func init() { X = 5 }

Dk
28.09.2018
20:15:45
Пасиб

anatolii
28.09.2018
20:15:48
Это надо или я не понял?:)

Dk
28.09.2018
20:16:34
Да-да, всё верно

anatolii
28.09.2018
20:54:06
Вопрос такой. Мне надо рекурсивно создать структуру к примеру это будет информация о пользователе type User struct { Name string LastName string Parent User // вот тут меня ждет неудача }

Го не позволяет такие штуки делать

Как можно выйти из положения?

Google
anatolii
28.09.2018
20:56:00
Технически рекурсии не будет, но так уж сложилось что структуры идентичные, копировать все поля не охота (всего один уровень будет, у родителя родителя не будет)

их наследовать можно

благодарю

Artem
28.09.2018
20:58:18
Parent *User ?

anatolii
28.09.2018
20:59:02
Хм, ща попробую, а жсон анмаршал сам схавает где сылка а где поле?

Artem
28.09.2018
20:59:16
да

anatolii
28.09.2018
21:00:47
можете мне обьяснить почему со ссылкой он хавает?

Artem
28.09.2018
21:04:39
без нее идет ошибка инициализации он выделяет память на структуру, внутри такая же, опять выделяет, потом опять и так до конца памяти. *User это 8 байт - фиксированный размер

anatolii
28.09.2018
21:07:24
Получается если я на все вложеннве структуры буду ставить звезды, это нормальный подход? или оно нужно лишь в экстренных случаях?

Александр
28.09.2018
21:09:25
это не просто звезды

int - число

*int - ссылка на число типа int

это как папка и ярлык в винде

anatolii
28.09.2018
21:10:37
Это я понимаю, не будет ли подводных камней при инициализации всего этого звездного добра?

Александр
28.09.2018
21:11:42
не будет

anatolii
28.09.2018
21:12:19
Спасибо, поэкспериментирую

Александр
28.09.2018
21:14:43
более того это единственный способ корректно дать ссылку на другого пользователя

если допустить что возможно было бы передать просто user то ты бы передал копию и при изменении например имени у оригинала, у остальных оно бы оставалось старым

anatolii
28.09.2018
21:44:38
Дебажить такой код само удовольствие

Сплошные адреса вокруг

Google
Александр
28.09.2018
21:48:26
раскажите ему за плюсы

anatolii
28.09.2018
21:49:31
Не надо сравнивать с чем-то хуже, надо стремиться к чему-то лучше

Ilya
28.09.2018
21:50:07
Дебажить такой код само удовольствие
А что, современные дебагеры не в силах показать, что по ссылке лежит?

anatolii
28.09.2018
21:50:31
Ну я вскод использую, чета с ним не весело вообще

может и есть что, я просто не знаю

Александр
28.09.2018
21:50:45
переходи на goland

он конечно платный

но там есть месячная подписка за 3 копейки

anatolii
28.09.2018
21:51:56
триал попробую

Ilya
28.09.2018
21:52:14
Вскод ужасно
Че ужасного то?

Дебаггер?

anatolii
28.09.2018
21:52:24
Если нет продакшена то платные иде не очень прикольно то же

Да, дебагер в вскоде ужасный

вложенные структуры не показывает, тока первый уровень

Ссылки не показывает

Никита
28.09.2018
21:53:23
Я не понимаю как им в принципе пользоваться можно

anatolii
28.09.2018
21:53:44
Сам редактор норм, плагин го не очень

Ilya
28.09.2018
21:54:06
Я не понимаю как им в принципе пользоваться можно
Ну я пользуюсь, и мне норм. Что конкретно не устраивает то?

Google
Ilya
28.09.2018
21:54:14
А то так до емакса договоримся

anatolii
28.09.2018
21:54:24
Дебагер не устраивает

Ilya
28.09.2018
21:57:43
Может плагин есть?

С людским дебаггером

Который умеет показывать содержимое ссылок в 2К18

Jentry
28.09.2018
21:58:15
Так delve же, чем он не устраивает?

Admin
ERROR: S client not available

anatolii
28.09.2018
22:04:24
Так delve же, чем он не устраивает?
Я вот ща про него читаю, и по ходу чтения меня все чаще посещают мысли купить goland

Jentry
28.09.2018
22:05:50
У меня есть лицензия на голанд, но работаю я в vscode, не понимаю, что в нем может быть не так, дебаггер одинаково ущербен для го, значения по указателю он показывает, а вот вызывать функции нет

anatolii
28.09.2018
22:09:00
Да, я ща проверил, дебагер такой же

+- получше, но в целом тоже не айс



Это валоженая структура

И там есть данные

Ну, в любом случае вотч спасает, там можно увидеть все

Лучше чем ничего

Александр
28.09.2018
22:22:22
если смотреть не иницилизированную переменную аля

var MyStr string остановка > if MyStr != ""

она будет забита мусором (ну в принципе так и есть)

Google
Artem
28.09.2018
22:23:38
или дебаггер не знает куда смотреть и смотрит в рандомное место?

Александр
28.09.2018
22:25:23
хотя немного не так

щаз

anatolii
28.09.2018
22:25:47
Кстати нет

Вскод не показывает мусор

Александр
28.09.2018
22:25:54
или поправили уже, хз. Помню был прикол

кто помнит про этот баг напишите

когда в дебагере был мусор

Marlik
28.09.2018
22:46:55
Как бы извернуться, например: http.Handle("/", indexHandler(m)) ... func indexHandler(m *model.Model) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World") }) } Тут m это модель которую я передаю в хэндлер. А хочется то же самое но проделать с fasthttp. Но у fasthttp нету HandlerFunc, как то можно обойти?

Aleksandr
28.09.2018
22:57:10
Это просто декоратор. Декорируй своей функцией, которая вернёт что нужно

Aleksandr
28.09.2018
23:30:24
Ну ты же им декорируешь?) Декорируешь чтобы вернуть в нужном тебе формате

Marlik
28.09.2018
23:43:17
Я к тому что есть ли похожий метод в fasthttp как HandlerFunc?

Aleksandr
28.09.2018
23:47:18
В код fasthttp посмотрел? Примеры посмотрел? Ты спрашиваешь сейчас про 3-хстрочный декоратор

Посмотри код Handlefunc и скопипасти, поменяв сигнатуру

Marlik
28.09.2018
23:48:19
Вот доку пытаюсь смотреть, думал быстрее спросить получится.

Как-то так получилось: r := fasthttprouter.New() r.GET("/", middleware(indexHandler(m))) log.Fatal(fasthttp.ListenAndServe(":4000", r.Handler)) ... func indexHandler(m *db.Handler) fasthttp.RequestHandler { return func(ctx *fasthttp.RequestCtx) { fmt.Fprintf(ctx, "Hi there!") } } func middleware(h fasthttp.RequestHandler) fasthttp.RequestHandler { return func(ctx *fasthttp.RequestCtx) { h(ctx) } }

The
29.09.2018
09:38:13
Марлик вернулся

Страница 1476 из 1630