Anonymous
ну ты спросил конечно
Anonymous
хз не помню
John
все равно в функцию копия приходит, а не то что вы думаете)))
Andrey
а сможете ответить на вопрос, почему когда создается касел-контекст, его потом в дефере вызывают?
Sher
видимо ты не шаришь, и не видишь разницы)
по твоей реакции ты сам не в ладах с этой темой))
Andrey
по твоей реакции ты сам не в ладах с этой темой))
да почему, я просто вижу плюс и минусы обоих подходах
Sher
да почему, я просто вижу плюс и минусы обоих подходах
выше отметили что указатель на слайс в большинстве случаев не нужен…и для этого есть основания
Anonymous
первое что в голову приходит
Anonymous
все рекомендуют юзать без поинтера
Anonymous
но это ваш код мне пох ;)
John
слайс указателей бэд практис
согласен, перегружает читаемость
John
ок, приведите реально стоящий пример работы с срезом указателей
John
это почти как lockTheSystem:=make(chan<- bool)
Sher
срез из указателей используется часто
Evgeniy
Да будет срач)
Andrey
срез из указателей используется часто
тут нет ошибки, люди не понимают разницу и плюсы/минусы между []User и []*User
Anonymous
сам бенчами прогони
Andrey
я все что вижу, так это у вас бэнчи хуже, или это бед практис. Но никто не говорит почему так
Anonymous
с поинтером аллокатит новый кусок памяти для каждой записи в слайс
Sher
я все что вижу, так это у вас бэнчи хуже, или это бед практис. Но никто не говорит почему так
посмотри на тип slice и то что там под капотом…все станет ясно…
Anonymous
а про слайс где что-то
Anonymous
(с указателем)
Sher
я все что вижу, так это у вас бэнчи хуже, или это бед практис. Но никто не говорит почему так
slice это структура из 3 элементов cap, len unsafe.pointer - указатель на сами данные…и вот
Sher
было бы глупо хранить указатель на указатель и потом при использовании разыменовывать…получается один уровень тут лишний…поэтому и бед практис…
Anonymous
я все что вижу, так это у вас бэнчи хуже, или это бед практис. Но никто не говорит почему так
а что ты будешь делать если у тебя размер слайса будет меняться?
Anonymous
множество копий)
Anonymous
с разными значениями)
John
эммм, работа с указателями в php не такая как в Go
Егор
Доброго времени суток, а как можно ограничить количество цифр после запитой у float64?
NU
Доброго времени суток, а как можно ограничить количество цифр после запитой у float64?
package main import ( "fmt" "math" ) func roundFloat(val float64, precision uint) float64 { ratio := math.Pow(10, float64(precision)) return math.Round(val*ratio) / ratio } func main() { number := 12.3456789 fmt.Println(roundFloat(number, 2)) fmt.Println(roundFloat(number, 3)) fmt.Println(roundFloat(number, 4)) fmt.Println(roundFloat(number, 5)) number = -12.3456789 fmt.Println(roundFloat(number, 0)) fmt.Println(roundFloat(number, 1)) fmt.Println(roundFloat(number, 10)) }
NU
как Go приложуху в батник перевести?
Ron Mount
go build lol.go
NU
Thx
Tony
Подскажите, есть какой-то паттерн - в базе есть разные пользователи одной организации, а так же есть пользователи самого ПО, эти самые организации. Как реализовать разделение в базе и интерфейсе?
Grigory
видимо ты не шаришь, и не видишь разницы)
Вижу, так же вижу что в основном это делают от балды
Grigory
А ещё вижу одного дяденьку, который много о себе слишком думает
Борис
Подскажите, есть какой-то паттерн - в базе есть разные пользователи одной организации, а так же есть пользователи самого ПО, эти самые организации. Как реализовать разделение в базе и интерфейсе?
Не уверен, что могу назвать какой-то конкретный паттерн это может быть какая-нибудь чистая архитектура. Есть какое-то бизнес требование на определённую ролевую модель (RBAC), как им бы было удобно хранить данные о пользователях, и какими правами они наделены. Например таблица с аккаунтами и индикацией (сотрудник или пользователь ПО), в самом приложении заводятся сущности с полями определяющими этот момент, и когда разбирается запрос в контроллере из какой-то точки входа, тянется нужный юзкейс для поиска юзера в базе например, и через слой репозитория и его интерфейсы (CRUD), формируется запрос непосредственно уже в базу, где находятся нужные данные, ну а дальше какая логика нужна, такую и отрабатываете, мне кажется так...
yernar
Вижу, так же вижу что в основном это делают от балды
адрес слайса может поменяться после append
Grigory
слайс указателей бэд практис
Слайс указателей бывает имеет смысл, например при асинхронном сборе ответов одного сервиса, когда у тебя верхнеуровнево прилетают указатели, особо смысла гонять это дело в значения нет
Grigory
И?
yernar
если вы хотите сделать аппенд в массив и сохранять изменения после выполнения функции то нужно будет передавать адрес.
Grigory
видимо ты не шаришь, и не видишь разницы)
Коли ты такой умный, рассказал бы нам, неучам, в чем суть
Grigory
Но у меня практика такая, что я часто видел что слайс указателей используют за просто так
Grigory
А ещё самый прикол это указатель на слайс
Grigorij
>А ещё самый прикол это указатель на слайс что плохого в этом?
Grigory
>А ещё самый прикол это указатель на слайс что плохого в этом?
У тебя слайс и так ссылочной тип, а ты ещё его этой логикой сверху обмазываешь
Борис
😏 те хранить данные каждой орг в отдельной базе.
ну это часто происходит, если у приложения разные релизы, под разных пользователей
Grigorij
У тебя слайс и так ссылочной тип, а ты ещё его этой логикой сверху обмазываешь
ок, наверно надо смотреть на конкретный случай тот как наверху конечно не имеет смысла указатель на слайс берут когда не хотят чтобы он копировался, передавая его. или есть ещё что то? в случае наверху мне также не очень понятно почему взяли cards []*types.Card а не *[]types.Card
Борис
ну это часто происходит, если у приложения разные релизы, под разных пользователей
Но если это условно какой-то один сегмент, логичнее хранить их на одной базе, с разными таблицами и разными userid
Grigory
Не понимаю как люди спокойно пишут функцию типа func ChangeActiveCard(cards []*types.Card) { for _, v := range cards { if v.Activity == false { И им не коробит от отсутствия проверки на Нил
Grigorij
Ну копирование слайса не такая жирная операция кмк
в большинстве случаев это наверно так ну вдруг перформанс важен и там данные не совсем маленького размера ну это так, только мои мысли, я мало работал ещё с голангом
Grigory
Длина, капасити и тыры пыры
Grigory
А сам массив как был указателем внутри слайса так им и остался
Борис
А сам массив как был указателем внутри слайса так им и остался
ну вот то что им может прилететь nil, а они ничего не возвращают, это может сразу вылететь в цикле.
Tony
ну это часто происходит, если у приложения разные релизы, под разных пользователей
А правильно понял, что есть база с учётными данными, а при входе пользователя обращаться уже в другую базу с данными организации этого пользователя?
Борис
А правильно понял, что есть база с учётными данными, а при входе пользователя обращаться уже в другую базу с данными организации этого пользователя?
Если вашим приложением будет пользоваться отдельная организация со своей инфраструктурой, то и база у неё будет своя, если такого разграничения нет, и это всё одно приложение обрабатывает, которое готово работать условно с физ.лицами, юр.лицами и сотрудниками, то можно иметь единую таблицу с аккаунтами, а после идентификации кто это, уже давать доступ к таблицам привязанным к этим пользователям, предварительно можно прогонять их через аутентификацию и авторизацию, уже любым доступным способом.
Борис
А правильно понял, что есть база с учётными данными, а при входе пользователя обращаться уже в другую базу с данными организации этого пользователя?
ну и если говорить там о микросервисности, то можно это разделить по разным базам, сервис Аутентификации пользователя имеет свою собственную базу и определяет, подлинность паролей, потом сервис связанный с какими-то функциями Авторизации, тоже со своей базой, ну и потом уже доступ к сервису, который даёт что-то поделать пользователю
Tony
Интересно, спасибо
Борис
ну если я какую-то не ту вещь прогнал, коллеги меня поправят))0
Belka
Пытаюсь сделать go mod tidy, он находит пакет, который удалили и выдает but does not contain package, хотя этот пакет был специально удален. Как это можно исправить?