
Илья
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
"нет консруктора для дефолтной ошибки," - есть. только не конструктор, а функция

Илья
03.10.2017
10:37:29

Pawel
03.10.2017
10:38:29

Илья
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 - это конструктор?

Илья
03.10.2017
10:48:02

Pawel
03.10.2017
10:49:33
и наоборот, возвращать конкретный тип вместо общего интерфейса - не правильно. Вон сегодня чел в коментариях на хабре жалуется дивану на 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;
как изолировать эту функцию, чтобы нельзя было вызвать её несколькими горутинами одновременно? #вопрос

Anatoly
03.10.2017
11:13:50

Илья
03.10.2017
11:14:55

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
и ещё три ` в конце
атдуши

Anatoly
03.10.2017
11:18:57

in favor
03.10.2017
11:19:39

Anatoly
03.10.2017
11:20:05

Илья
03.10.2017
11:20:06

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

Google

Илья
03.10.2017
11:21:07

Мерлин
03.10.2017
11:22:28

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

Димка
03.10.2017
11:44:08

Alexander
03.10.2017
11:44:55

Pawel
03.10.2017
11:45:43

Илья
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

in favor
03.10.2017
11:57:44

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
тут надо спросить, а что еще может быть (не говенный гогленд)

Pawel
03.10.2017
12:02:01

Axm
03.10.2017
12:02:21

Daniel
03.10.2017
12:02:21
коллеги
ide-срач забаню сразу

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

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

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
я бы советовал позволить всем все

Axm
03.10.2017
12:06:34

AxiS
03.10.2017
12:06:34

Daniel
03.10.2017
12:06:54

in favor
03.10.2017
12:07:06