
Никита
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

Google

Никита
28.09.2018
19:52:15

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 копейки

Никита
28.09.2018
21:51:45

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

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
Это просто декоратор. Декорируй своей функцией, которая вернёт что нужно

Marlik
28.09.2018
22:58:59

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
Марлик вернулся