
Roman
24.02.2018
23:15:09
wait, what?! boolean не thread safe?!

Vladimir
24.02.2018
23:15:39

Roman
24.02.2018
23:16:26
А с чего ему быть?
может быть уже поздно и моя голова не работает но... нужно защищать boolean field - mutex'ом при concurrent read/write?

Vladimir
24.02.2018
23:16:51

Google

Vladimir
24.02.2018
23:17:06
Или эмулировать через атомик инт

Roman
24.02.2018
23:17:33
постой, а почему?
почему boolean reading/assignment не atomic по умолчанию?
это же вроде тривиальная операция

Vladimir
24.02.2018
23:21:47
В железе у тебя регистры
И память
И "загрузить в регистр"
А ещё потому что на атомик операцию тебе ещё надо инвалидировать кэш лайн в соседних ядрах и ЦПУ

Roman
24.02.2018
23:23:39
понял

Vladimir
24.02.2018
23:23:39
Поэтому оно и не атомик

Roman
24.02.2018
23:23:47
ну тогда буду эмулировать атомиком
кстати интересно.. нет ли разницы в производительности меж sync.атомиками и наивной имплементацией с RWMutex?

Google

Vladimir
24.02.2018
23:25:14
Но там не так принципиально
Атомик не бесплатно даётся

Roman
24.02.2018
23:26:04

Vladimir
24.02.2018
23:26:08
Ну то есть если ты делаешь десяток операций мьютекс лучше чем десяток атомиков
1 vs 1 - atomic дешевле.
Из головы разницу в скорости не скажу
Сделай бенч сам

Roman
24.02.2018
23:29:27

Vladimir
24.02.2018
23:31:06
Всем Мир! Есть какие-то симпатичные альтернативы тому чтобы писать код в $GOPATH? Потому как надоело юзать относительное пути и.т.п, перекидывать GOPATH, тоже особого желания каждый раз нет. Сколько сейчас читал есть много недовольный такой системой, но многие ее и защищают, с различными менеджерами тоже немного запутанно кажется

Aleksandr
24.02.2018
23:32:30
относительные пути использовать не надо совсем. дальше есть предмет обсуждения?

Vladimir
24.02.2018
23:37:38
Ладно.. видимо я неверно выразил вопрос или что-то сам перепутал. Насколько я знаю, я должен писать свой код в $GOPATH/src/myproject, но хотел узнать как можно держать папку проекта вне $GOPATH, сейчас dep ругается на то что папка проекта находится вне GOPATH

Aleksandr
24.02.2018
23:39:46
просто пиши все в GOPATH - сбросишь с себя огромный ком постоянных размышлений и станешь продуктивнее. серьезно, после принятия стандартной практики волосы становятся шелковистее (в моем случае перестают выпадать)

Vladimir
24.02.2018
23:41:59
Окей, попробую, но выглядит это немного странно)

Aleksandr
24.02.2018
23:42:26
вот такой язык
как привыкнешь к нюансам, прозреешь
откровение у тебя будет
прекрасный религиозный опыт

Roman
24.02.2018
23:52:44

Marlik
24.02.2018
23:53:56
я вот щас на dep перешёл, и теперьча думаю как из github.com/. вычищать то что натыкал?

Google

Aleksandr
24.02.2018
23:54:01

Roman
24.02.2018
23:55:14

Marlik
24.02.2018
23:56:06

Roman
24.02.2018
23:56:35
какой мусор?

Aleksandr
24.02.2018
23:57:00

Roman
24.02.2018
23:57:28

Marlik
24.02.2018
23:57:50

Roman
24.02.2018
23:58:20
снеси GOPATH, создай новый, в чём проблема то?

Marlik
24.02.2018
23:58:39
Упс, эт как?
А что будет с нужными пакетами? Доустановить?)))

Roman
24.02.2018
23:59:51

Marlik
25.02.2018
00:00:42
У мну и так 1.10...

Roman
25.02.2018
00:02:07
имеется ввиду снеси всё нахрен и поставь заново чтоб лишний раз руки не пачкать

Marlik
25.02.2018
00:05:31
Не, это не тру путь. Подожду када разрабы допилят эту фичу, типа go clear ))
Тем более там не так много, можно ручками перебрать.

Aleksandr
25.02.2018
00:08:51

Marlik
25.02.2018
00:09:07
Ну и ладно.

Vladimir
25.02.2018
00:10:14
а в чём проблема? почему не в $GOPATH/src/namespace/yourproject ?
Ну потому как, выглядит это странно, что нельзя писать код там где тебе хочется. У меня есть папка с различными проектами, на разных языках. Иногда go исполюзуется для какой-то небольшой части в проекте на python и.т.п То что это не go way я знаю, но людей которых этот момент смущает тоже достаточно. Ладно как говорится в чужой монастырь...) Вот в этом и заключался вопрос, как я понял GB как-то это обходит. Но видимо лучше смириться)

Aleksandr
25.02.2018
00:11:08

Google

Aleksandr
25.02.2018
00:11:24
можешь gopath менять в рантайме

Roman
25.02.2018
00:11:43

Aleksandr
25.02.2018
00:11:45
но идеально делать канонично. голова просветлеет

Vladimir
25.02.2018
00:12:36
Да, сейчас по канонам попробую)

Marlik
25.02.2018
00:15:09
Вот как мне эту грёбанную проблему обойти, весь моск иссушила)))
func course() (exc *Exch, err error) {
str := []string{"USD", "EUR"}
s := new(Course)
exc = new(Exch)
for _, item := range str {
resp, err := http.NewRequest("GET", "http://api.fixer.io/latest?base="+item, nil)
...
vet жалуется на то, что err уже объявлена, и что самое удивительное, что оно считает объявленным err в возврате.
declaration of "err" shadows declaration at currensy.go:27 (vetshadow)

Aleksandr
25.02.2018
00:16:37
ты в переборе переопределеяешь err, который в именованом возврате
именованный возврат - это прикольно, но лучше обходись без него

Admin
ERROR: S client not available

Marlik
25.02.2018
00:17:46
А, кажись понял, была такая мысль, но никак не придумал как закодировать её.
Спасибо, ща покумекаю.

Aleksandr
25.02.2018
00:18:37
что кумекать? убери err из сигнатуры и перепиши

Marlik
25.02.2018
00:22:23
func course() (exc *Exch, er error) {
...
return exc, er
}
Ахренеть))))) Спасибо.
Всё равно криво.

Aleksandr
25.02.2018
00:23:41
(exc *Exch, er error) - ты вообще понимешь что это за запись?

Marlik
25.02.2018
00:25:52
Да, я возвращаю указатель на структуру и ошибку. Но так как у меня не определена er, то я возвращаю пустышку, может nil вернуть?

Aleksandr
25.02.2018
00:27:10
нет, не понимаешь
er error означает что ты можешь в теле функции создать переменную er и она вернется без return
func() (er error) {
er := ....
}
func course() (*Exch, error)
так сделай

Google

Marlik
25.02.2018
00:29:04
func course() (exc *Exch, err error) {
...
return exc, nil
}
вот так тоже пойдёт?

Aleksandr
25.02.2018
00:30:17
прочти предыдущие мои сообщения

Marlik
25.02.2018
00:32:02
Я понял, просто так у меня написано, что, если прога дошла в конец функции, и ошибок нет, мне проще nil вернуть, у меня там в середине кода много проверок на ошибки.

Aleksandr
25.02.2018
00:32:43
причем тут nil? я тебе про nil слова не сказал

Marlik
25.02.2018
00:37:46
Я понял про именованную переменную в возврате, ну могу в крайнем случае, её воткнуть в последней проверке, у меня как-то так если ошибка, а отлавливаю её по recover
return nil, errors.Wrap(err, "Текст ошибки")
return nil, errors.Wrap(err, "Текст ошибки")
return nil, errors.Wrap(err, "Текст ошибки")
...
В конце, уже возвращать нечего, ибо все ошибки проверены, но так как в возврате стоит error, то нужно что-то вернуть. Или переписывать?

Aleksandr
25.02.2018
00:38:29
ты говоришь, то понял, но ты не понял
убери именованый возврат. и это не имеет отношение к nil, проверкам итд. это просто сделает код более понятным и поддерживаемым (на что тебе vet и ругается)

Marlik
25.02.2018
00:40:36
Я просто так не писал никогда, и даже не задумывался, спасибо за урок.

Dmitri
25.02.2018
00:54:31

Marlik
25.02.2018
00:56:17

Александр
25.02.2018
01:15:21
Именованный ретурн только для ФУНКЦИЙ в три строчки
иначе зло
это еще называю "голый" ретурн
ибо
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}

Marlik
25.02.2018
05:02:21
Ядрён-батон!
app.go:16::warning: cyclomatic complexity 24 of function main() is high (> 10) (gocyclo)

Zver
25.02.2018
05:15:54

Marlik
25.02.2018
05:16:48
Спасибо, я даже половины не написал, это бот на либе.

Zver
25.02.2018
05:21:29