@proGO

Страница 1253 из 1674
Roman
24.02.2018
23:15:09
wait, what?! boolean не thread safe?!

Vladimir
24.02.2018
23:15:39
wait, what?! boolean не thread safe?!
А с чего ему быть?

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

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
почему boolean reading/assignment не atomic по умолчанию?
Потому что в железе нет була

В железе у тебя регистры

И память

И "загрузить в регистр"

А ещё потому что на атомик операцию тебе ещё надо инвалидировать кэш лайн в соседних ядрах и ЦПУ

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 дешевле.

Из головы разницу в скорости не скажу

Сделай бенч сам

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
вот такой язык

как привыкнешь к нюансам, прозреешь

откровение у тебя будет

прекрасный религиозный опыт

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

Google
Aleksandr
24.02.2018
23:54:01
а в чём проблема? почему не в $GOPATH/src/namespace/yourproject ?
а это не одно и то же? неужели он про кол-во уровней вложенности говорил?

Roman
24.02.2018
23:55:14
я вот щас на dep перешёл, и теперьча думаю как из github.com/. вычищать то что натыкал?
если ты про зависимости то с версии 1.8 компилятор автоматически ищет их сначала в локальной /vendor а потом уже в $GOPATH

Marlik
24.02.2018
23:56:06
если ты про зависимости то с версии 1.8 компилятор автоматически ищет их сначала в локальной /vendor а потом уже в $GOPATH
Я не про зависимости, я про тот мусор что сейчас там находится, как его оттеда удалить, ибо юзать буду только через vendor

Aleksandr
24.02.2018
23:57:00
не понимаю проблему..
куча либ скачанных через go get

Roman
24.02.2018
23:57:28
куча либ скачанных через go get
так в чём собственно проблематика?))

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
А что будет с нужными пакетами? Доустановить?)))
можно просто занового установить Go, заодно на новую 1.10 перейти))

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 ))

Тем более там не так много, можно ручками перебрать.

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

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

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

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
func course() (*Exch, error)
Аааааа, понял))))) Чото не разглядел сразу про что вы.

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

Marlik
25.02.2018
00:56:17
func course()(*Exch,error) {}
Да да, я уже понял Александр настойчиво убедил меня)))

Александр
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
Ядрён-батон! app.go:16::warning: cyclomatic complexity 24 of function main() is high (> 10) (gocyclo)
В чем ядрен батон? Либо много циклов, либо просто придирается. Я вообще gocyclo отключал. Даже на несложный код матерился.

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

Zver
25.02.2018
05:21:29
Спасибо, я даже половины не написал, это бот на либе.
Наверное металинтером пользуетесь. Там как-то флагами отключается. Либо можно задать конкретные линтеры.

Страница 1253 из 1674