Daniel
и вот так тоже компилится и работает: https://play.golang.org/p/1PBDNga6CU
Daniel
то есть - цикл это ДВА скопа
Daniel
будет добавлено в воскресный доклад, однозначно
Sergey
охренеть
Sergey
я только что сам осознал, что f сначала это string
Sergey
а внутри превращается в дескриптор
Sergey
и строготипизированный го не ругается
Sergey
что я с ним так жестоко обхожусь
Daniel
линтеры должны ругаться
Ilya
баг?
Ilya
неа
Ilya
он не компилит цикл
Ilya
потому что массив пустой
Ilya
бггг
Ilya
он тупо решил - ну его нах проверку делать
Ilya
Daniel
потому что массив пустой
вот не пустой: https://play.golang.org/p/P3b2k6E-i9
Ilya
panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x47c171] goroutine 1 [running]: main.main() /home/brainstorm/work/go/test.go:16 +0x141 exit status 2
Ilya
это если не пустой
Daniel
мой пример работает
Ilya
а ты несуществующий открой
Kirill
а, ты уже знаешь
Ilya
я тупо 11111 вбил
Daniel
зачем несуществующий
Daniel
а, ты уже знаешь
и я фалломорфировал
Ilya
if err != nil { panic("Failed to open '" + f.Name() + "'") }
Ilya
тут ошыбко
Ilya
f nil если еггог
Kirill
и я фалломорфировал
дык всегда так было
Daniel
строкой выше то было имя файла
Daniel
Ilya
короче даже на го можно песатьговнокод
Ilya
ну так ты сделай чтобы оно левое было
Kirill
но я не знал
а как ты до этого код писал?
Kirill
ты же мог заметить :)
Ilya
f, err := os.Open(f) if err != nil { panic("Failed to open '" + f.Name() + "'") }
Ilya
неверный кусок
Ilya
if err != nil { - f nil
MXLTN
а кто-то работал с blueprint?
Kirill
но я не знал
я ещё напомню о том, что переменная любого типа может хранить в себе на самом деле абсолютно другой тип
Daniel
а как ты до этого код писал?
мне никогда не приходило в холову называть так переменные
Kirill
и я говорю не о interface{}
Daniel
линтеры тоже игнорируют расклад: $gometalinter.v1 --config ./gometalinter-ci.json cmd/qqq/ cmd/qqq/main.go:19::warning: Errors unhandled.,LOW,HIGH (gas) cmd/qqq/main.go:19:10:warning: error return value not checked (f.Close()) (errcheck)
Daniel
а --shadow есть?
$cat ./gometalinter-ci.json { "Disable": [ "gotype" ], "Vendor": true, "Concurrency": 8, "Deadline": "15m", "Skip": [ "gen" ], "Sort": [ "path", "line", "linter" ], "Exclude": [ "cyclomatic complexity \\d+ of function enumerateQuotes\\(\\) is high \\(> 10\\) \\(gocyclo\\)$" ] }
Kirill
я ещё напомню о том, что переменная любого типа может хранить в себе на самом деле абсолютно другой тип
другими словами - у меня в переменной a лежала строка. я, не создавая новую переменную, обнаруживаю там []someStruct. %T - строка. а реально - []someStruct. огонь? огонь.
Daniel
1.9 вышла
Kirill
1.9 вышла
в этом контексте - нужно поздравить или пойти за виски, верёвкой и мылом?
Daniel
ничего не изменилось
Daniel
все так же три переменные f разных типов мирно уживаются
Kirill
ничего не изменилось
а ты надеялся, что что-то изменится?
Kirill
это не go2. они не могут.
Daniel
ну - я проверил :)
Daniel
я прям обратно в перле себя почуствовал
Kirill
охуенно. pardon my french
тогда моя очередь была бы писать
Daniel
это да..
Kirill
я прям обратно в перле себя почуствовал
ну - я в начале изучения гошки думал, что тут всё заранее круто
Kirill
я был очень наивен
Daniel
я как раз не думал ничего такого
Daniel
но вот это просто сюрприз
Kirill
в перле как-то не питаешь надежды ни на что
Kirill
в своё время сюрпризом было увидеть в top20 ни одной своей функции
Daniel
это как раз совершенно не сюрприз
Daniel
я ни в одном языке своего там обычно не вижу
Kirill
то тебе рантайм, то ещё какая-то дичь из stdlib, то какая-то внутренняя функция fasthttp
Kirill
я тогда написал сначала top10, а там один runtime да stdlib. думал, что я как-то не так запустил и он не показывает мой код в принципе
Kirill
ан нет, смотришь дальше - находишь что-то своё. но настолько незначительно, что думаешь - какого хрена я должен использовать встроенные типы, когда всё, что работает с приемлемой скоростью - структурки да unsafe?
Kirill
но, к сожалению, ничего лучше гошки я так и не видел.
Michael
будет добавлено в воскресный доклад, однозначно
про замыкание и scope в effective go есть для Go так делать вполне нормально и если много defer-ов будет, то performance просядет
Michael
оф доки Go реально хороши
Daniel
Про перворманс - немного сказки
Anonymous
@twentydraft думаю pinned message можно убрать.
⏺ Vаdim
парни, подскажите например есть число byte 32, как его сделать string "32"?
Michael
Про перворманс - немного сказки
поэтому там впереди слово "много"
engelbart
А мне тут странного хочется. prefix_scan по map[string]string возможно?