Grigoriy
Anonymous
жанр?
Вообще я в основном Рок и метал слушаю, но для работы нужно что-бы было и приятно для ушей и что-бы сильно не отвлекало
Anonymous
Anonymous
Anatoly
да хер его знает, если честно. возможно, ржали, как кони и передавали косяк по кругу...
обработка ошибок в go сделана "на отстань", мягко говоря. возможно, они собирались когда-нибудь потом это все переделать, но не успели до взрывной популярности
знаете, да, что по началу у интерфейса error метод назывался String()? и что угодно, что его реализовывало, можно было вернуть в как ошибку?
А можно ли это правило переформулировать так: если реализация интерфейса имеет package область видимости, то возвращается интерфейс, а если это публичная структура, то структуру?
Axm
Chebyrash
Chebyrash
А, ок )
Daniel
randle
Ivan
@onokonem а можно вопрос про презентацию, которая в пине? Есть какие-то примеры вот этих минусов Go?
- Бойлерплейт везде
- Лёгкая Питонификация
Daniel
https://www.slideshare.net/DanielPodolsky/golang-highload
Ivan
Anatoly
Вчера, разбирая в книге по Go пример со стеком на слайсах, задался вопросом: ведь в продакшене в сервисах 24/7 использование такого "стека" на слайсах никогда не отдаст память системе, если его рассматривать как часть состояния сервиса:
var m []string;
...
/// push
m = append(m, some_string)
...
/// pop
m = m[:len(m)-1]
Ivan
Andrey
@onokonem спасибо
Anton
Всем привет😊
Pawel
Pawel
Pawel
Anatoly
errors противоречит этой рекомендации
Pawel
Илья
вроде оно https://github.com/golang/go/wiki/CodeReviewComments#interfaces
Pawel
что то мне с ходу не приходит в голову разумных причин не возвращать интерфейсы. хотелось бы понять, что имеется ввиду
Anatoly
Илья
ну, насколько я понимаю, идея в том, что интерфейсы - ограничение на входящие параметры, а функции должны возвращать конкретные типы
Pawel
господа, вы не поняли о чом там спич. А он о том, что не надо объявлять не используемые интерфейсы. И вовсе не о том, что вы сказали) Если можно вернуть из функции конкретный тип, который удовлетворяет интерфейсу. Это равнозначно тому, чтобы вернуть интерфейс, но код при этом более чистый.
Pawel
Если вызывающий код использует интерфейс, как это в случае с обработкой ошибок, то можете смело возвращать из функции этот интерфейс
Axm
Там же написано, что интерфейс должен в общем случае делать на стороне, которая им пользуется. Возвращать из другого пакета чужой интерфейс в таком случае не очень выглядит. Ну и не определишь свойства тогда.
Pawel
Pawel
в статье речь о том, что не надо делать что-то типа такого :
type MyError interface { Error() string }
Pawel
ибо не фиг
Pawel
а надо :
type MyError struct { ... }
func (x MyError) Error() string { ... }
Илья
хм, насколько я понял, в статье как раз говорится возвращаёте конкретные типы, насколько я понимаю, с error вышла путаница, тк это builtin interface, и, поскольку нет консруктора для дефолтной ошибки, они сделали конструктор
Илья
чтобы бойлерплейт не стал еще больше, тк в каждом пакете пришлось бы еще свою ошибку заводить
Pawel
"нет консруктора для дефолтной ошибки," - есть. только не конструктор, а функция
Илья
Илья
:)
Илья
всё, что сейчас используется для обёртки ошибки, fmt.Errorf, который внутри делает errors.New
Илья
https://golang.org/src/fmt/print.go?s=5540:5590#L194
Илья
без этого шортката, каждый пакет обязан был создавтаь свой тип для ошибки
Pawel
и чем же функция конструктор по вашему отличается от обычной функцииии? fmt.Sprintf - это конструктор?
Pawel
Илья
Pawel
и наоборот, возвращать конкретный тип вместо общего интерфейса - не правильно. Вон сегодня чел в коментариях на хабре жалуется дивану на fat pointer с nil data pointer и валидным vtable pointer https://habrahabr.ru/post/339192/
это потому, что у него не error, а какие-то его собственные типы возвращаются из функции
Alexander
Есть кусок кода, В нём
select limit 1000; update selected;
как изолировать эту функцию, чтобы нельзя было вызвать её несколькими горутинами одновременно? #вопрос
Anatoly
Илья
Pawel
Alexander
мьютекc?
var mu = sync.Mutex{}
func GetPendingBankTransfers(resp http.ResponseWriter, req *http.Request) {
mu.Lock()
UPDATE
mu.Unlock()
}
Так верно?
ceiling cat
и ещё три ` в конце
ceiling cat
атдуши
Anatoly
Anatoly
Илья
ceiling cat
Да или нет? :D
Мерль
ceiling cat
Во, спасибо
ceiling cat
Всё таки defer одна из самых крутых штук в go
Alexander
fatal error: sync: unlock of unlocked mutex
fatal error: sync: inconsistent mutex state
Alexander
Как так?
Anonymous
Alexander
а, точно.
Илья
вообще в веб лучше использовать канал, чтобы можно было select с default case, чтобы при повторном вызове говорить, что занято, а не вешать приложение
Alexander
кстати да, я как раз повесил
Alexander
а как правильно написать?
Мерль
Илья
делаешь канал с бфуером 1, делаешь селект, с записью в канал и дефолтным кейсом 409 каким-нибудь, 1ый воркер запишет в канал, в конце работы читает из канала, что-нибудь такое
Daniel
и?