@gogolang

Страница 555 из 1630
Илья
03.10.2017
10:21:43
ну, насколько я понимаю, идея в том, что интерфейсы - ограничение на входящие параметры, а функции должны возвращать конкретные типы

Pawel
03.10.2017
10:24:20
господа, вы не поняли о чом там спич. А он о том, что не надо объявлять не используемые интерфейсы. И вовсе не о том, что вы сказали) Если можно вернуть из функции конкретный тип, который удовлетворяет интерфейсу. Это равнозначно тому, чтобы вернуть интерфейс, но код при этом более чистый.

Если вызывающий код использует интерфейс, как это в случае с обработкой ошибок, то можете смело возвращать из функции этот интерфейс

Axm
03.10.2017
10:28:21
Там же написано, что интерфейс должен в общем случае делать на стороне, которая им пользуется. Возвращать из другого пакета чужой интерфейс в таком случае не очень выглядит. Ну и не определишь свойства тогда.

Google
Pawel
03.10.2017
10:30:10
в статье речь о том, что не надо делать что-то типа такого : type MyError interface { Error() string }

ибо не фиг

а надо : type MyError struct { ... } func (x MyError) Error() string { ... }

Илья
03.10.2017
10:35:50
хм, насколько я понял, в статье как раз говорится возвращаёте конкретные типы, насколько я понимаю, с error вышла путаница, тк это builtin interface, и, поскольку нет консруктора для дефолтной ошибки, они сделали конструктор

чтобы бойлерплейт не стал еще больше, тк в каждом пакете пришлось бы еще свою ошибку заводить

Pawel
03.10.2017
10:37:05
"нет консруктора для дефолтной ошибки," - есть. только не конструктор, а функция

Pawel
03.10.2017
10:38:29
чтобы бойлерплейт не стал еще больше, тк в каждом пакете пришлось бы еще свою ошибку заводить
в каждом пакете можно экспортировать свой объект, тип которого удовлетворяет error. это - best paractices

?? что ??
в го нет конструкторов

Илья
03.10.2017
10:40:19
в го нет конструкторов
конструктор - это не только про ООП, функции-констукторы тоже есть

:)

всё, что сейчас используется для обёртки ошибки, fmt.Errorf, который внутри делает errors.New

Google
Илья
03.10.2017
10:40:59
https://golang.org/src/fmt/print.go?s=5540:5590#L194

без этого шортката, каждый пакет обязан был создавтаь свой тип для ошибки

Pawel
03.10.2017
10:42:00
и чем же функция конструктор по вашему отличается от обычной функцииии? fmt.Sprintf - это конструктор?

без этого шортката, каждый пакет обязан был создавтаь свой тип для ошибки
есть ещё errors.New, но я ни фига не пойму шо вы хотите доказать

без этого шортката, каждый пакет обязан был создавтаь свой тип для ошибки
интерфейс error - это и есть тип ошибки. не фиг его создавать. а вот создавать типы, удовлетворяющие error, можно сколько хочешь, ни чего плохого в этом не вижу

Pawel
03.10.2017
10:49:33
мы точно об одной статье говорим? https://github.com/golang/go/wiki/CodeReviewComments#interfaces
абсолютно. я так и не понял в чём вы там видите противоречие с рекомендациями по обработке ошибок и использованию error

и наоборот, возвращать конкретный тип вместо общего интерфейса - не правильно. Вон сегодня чел в коментариях на хабре жалуется дивану на fat pointer с nil data pointer и валидным vtable pointer https://habrahabr.ru/post/339192/ это потому, что у него не error, а какие-то его собственные типы возвращаются из функции

Alexander
03.10.2017
11:12:54
Есть кусок кода, В нём select limit 1000; update selected; как изолировать эту функцию, чтобы нельзя было вызвать её несколькими горутинами одновременно? #вопрос

Pawel
03.10.2017
11:16:20
Alexander
03.10.2017
11:17:45
мьютекc?
var mu = sync.Mutex{} func GetPendingBankTransfers(resp http.ResponseWriter, req *http.Request) { mu.Lock() UPDATE mu.Unlock() } Так верно?

in favor
03.10.2017
11:18:16
и ещё три ` в конце

атдуши

in favor
03.10.2017
11:19:39
mu.Lock() defer mu.Unlock() UPDATE
принципиальной разницы же нету вроде, если в конце анлок? Дефер отработает в случае паники?

Anatoly
03.10.2017
11:20:05
принципиальной разницы же нету вроде, если в конце анлок? Дефер отработает в случае паники?
нет разницы, но где захватываешь, там и откладывай освобождение

in favor
03.10.2017
11:20:33
Да или нет? :D

Google
Илья
03.10.2017
11:21:07
Да или нет? :D
https://blog.golang.org/defer-panic-and-recover

Мерлин
03.10.2017
11:22:28
принципиальной разницы же нету вроде, если в конце анлок? Дефер отработает в случае паники?
Есть Если у тебя запаникует функция, то defer выстрелит всё равно

in favor
03.10.2017
11:23:45
Во, спасибо

Всё таки defer одна из самых крутых штук в go

Alexander
03.10.2017
11:24:03
fatal error: sync: unlock of unlocked mutex fatal error: sync: inconsistent mutex state

Как так?

Mush
03.10.2017
11:24:36
Alexander
03.10.2017
11:25:18
а, точно.

Илья
03.10.2017
11:27:15
вообще в веб лучше использовать канал, чтобы можно было select с default case, чтобы при повторном вызове говорить, что занято, а не вешать приложение

Alexander
03.10.2017
11:30:05
кстати да, я как раз повесил

а как правильно написать?

Илья
03.10.2017
11:33:49
делаешь канал с бфуером 1, делаешь селект, с записью в канал и дефолтным кейсом 409 каким-нибудь, 1ый воркер запишет в канал, в конце работы читает из канала, что-нибудь такое

Daniel
03.10.2017
11:35:55
и?

Mush
03.10.2017
11:37:10
это 2 механизма для одного и того же

ну каналы конечно шире гораздо ))

https://github.com/golang/go/wiki/MutexOrChannel

Илья
03.10.2017
11:38:27
а зачем каналы если он уже использует лок
ну, сейчас у него при обработке http запроса 1ый будет выполнять долгий запрос, остальные будут висеть, потом второй будет выполнять запрос, и т.д., я не думаю, что это нормальное поведение для api

Alexander
03.10.2017
11:39:47
не, как раз именно на этом хэндлере надо сделать именно так.

юзер забирает 1000 записей на обработку. Потом я их помечаю как разданные.

Google
Димка
03.10.2017
11:40:55
не согласен с автором в этом моменте: Есть соблазн сделать код универсальным func SomeFunc(s []interface{}) { ss := s.([]string) ... } слайс, это по сути структура, тогда и надо пытаться преобразовывать к interface{} вместо s []interface{} тогда надо использовать s interface

Alexander
03.10.2017
11:41:05
Но до того, как я их пометил status='in progress', следующий запрос забирает те же 1000 записей

AxiS
03.10.2017
11:44:01
Но до того, как я их пометил status='in progress', следующий запрос забирает те же 1000 записей
таймаут может сработать до того как ответит на второй запрос Поэтому возврат кода выше и предлагали

Димка
03.10.2017
11:44:08
Alexander
03.10.2017
11:44:55
таймаут может сработать до того как ответит на второй запрос Поэтому возврат кода выше и предлагали
фиг с ним с таймаутом, главное, чтобы они оба не забрали одинаковые наборы

Pawel
03.10.2017
11:45:43
нет разницы, но где захватываешь, там и откладывай освобождение
Зависит от кол-ва loc в теле функции. Не нужно злоупотреблять defer. Это всего лишь шугар.

Илья
03.10.2017
11:46:12
фиг с ним с таймаутом, главное, чтобы они оба не забрали одинаковые наборы
у вас может клиент не дождаться завершения запроса, и в итоге никто это уже не обработает

Alexander
03.10.2017
11:46:34
он заберет его при следующем запросе

Илья
03.10.2017
11:46:35
для таких кейсов стоит добавить context запроса

Ivan
03.10.2017
11:52:24
НУ вы видели?

Build desktop applications in Go and HTML #dev #osx https://github.com/alexflint/gallium

in favor
03.10.2017
11:53:04
...

Т.е. это просто веббраузер ?

Pawel
03.10.2017
11:57:11
Т.е. это просто веббраузер ?
нет, это хромимум. на нём vs code написана

in favor
03.10.2017
11:57:44
нет, это хромимум. на нём vs code написана
ну так это веббраузер, маскирующийся под десктопное приложение

Pawel
03.10.2017
11:58:22
ну так это веббраузер, маскирующийся под десктопное приложение
да, изврат. но работает если долго пороться

Michael
03.10.2017
11:58:47
или не работает)

Pawel
03.10.2017
12:00:02
даже atom работает) говно то ещё, но некоторые не гнушаются

in favor
03.10.2017
12:00:45
А кто-то пользуется Atom или VSC для написания го-кода?

Axm
03.10.2017
12:00:58
я VSC

Google
Pawel
03.10.2017
12:01:12
я пользуюсь vscode для typescript

Axm
03.10.2017
12:01:22
тут надо спросить, а что еще может быть (не говенный гогленд)

Axm
03.10.2017
12:02:21
gogkand говёный?! лол
давай не будем о религии, ты меня все равно не переубедишь

Daniel
03.10.2017
12:02:21
коллеги

ide-срач забаню сразу

Axm
03.10.2017
12:03:29
хорошо быть модератором, можно банить все что тебе не нравится

Daniel
03.10.2017
12:03:36
я вот вообще в саблайме пишу, и доволен (но лучшим считаю vscode, просто ленюсь ему клавиатурные шорткаты настраивать)

хорошо быть модератором, можно банить все что тебе не нравится
и это тоже. но ide-срач совсем бессмысленный в 100% случаев

in favor
03.10.2017
12:05:10
во время ide-cрачей рождается истина

Daniel
03.10.2017
12:05:31
нет, только килотонны навоза

in favor
03.10.2017
12:06:12
Позволить человеку назвать гогланг дерьмом? (хотя я согласен, пока он сыроват)

Daniel
03.10.2017
12:06:30
я бы советовал позволить всем все

Daniel
03.10.2017
12:06:54
есть готовое расширение с sublime шорткатами
у меня свои, я их из far принес

in favor
03.10.2017
12:07:06
что значит "позволить"?
это значит пропустить мимо ушей, опасаясь бана)

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