How to Go wrong
1.57K subscribers
11 photos
1 video
191 links
Download Telegram
🔝 Плюсаните, пожалуйста, нас на главной странице https://news.ycombinator.com/ сейчас
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉12👎2
Не используйте } else {
👍15👎3
Forwarded from Путь Golang
🍺 Помню это был октябрь 2020. Я только устроился программистом в майнинг. Ездил от ст.м. Московская на 187 автобусе. И пытался слушать Go Time подкаст по дороге: https://changelog.com/gotime

🍺 Так вот. Еду я как-то, а там обсуждают, что из Golang удалить бы. И дядька один такой — я бы else удалил, я им не пользуюсь. И я такой наушники выронил — как это? Но решил для разнообразия попробовать.

🙅‍♂️ Первой моей реакцией было — как так можно-то? Жутко не удобно. На половине кейсов спотыкаешься и тратишь время на перестановки!!! switch ещё этот!!!

❤️ А где-то через пару месяцев я взглянул на код... И понял, что там где я заставил делать перестановки и выворачиваться из-за избегания else — там код читаемый, тестируемый и расширяемый. А там, где я так не делал, в ряде случаев он был запутанный и зачастую с ошибками (логическими).

🍓 Я не знаю до сих пор как это работает, но почему-то очень неудобно делать вложенные if, если избегать else и как-то эти вложения автоматом исчезают

🫵 А ты используешь else?

👉 Да, конечно, неявно такая практика рекомендуется и передовыми животноводами. но явного избегания else там нет:
https://google.github.io/styleguide/go/index
https://github.com/uber-go/guide/blob/master/style.md
👍15👎3
Решение сначала добавить телеметрию в команду go, а потом решение сделать её opt-in, а не opt-out, вызвало целую бурю эмоций в сообществе. Ответы на этот твит показывают обе стороны: одни продолжают негодовать из-за всего связанного со злым Гуглом, другие хотят дать больше данных команде Go. Если вы пропустили, то очень советую почитать серию постов Расса Кокса целиком: https://research.swtch.com/telemetry Ну или послушать меня в недавнем DevZen, а потом – тоже прочитать.
👍4👎1
func() {
f, err := os.Open("does-not-exist")
defer f.Close()

fmt.Println(err)
}()
👍3👎1
func() {
f, err := net.Dial("tcp", "1.1.1.1:443") // network is down
defer f.Close()

fmt.Println(err)
}()
How to Go wrong
func() { f, err := net.Dial("tcp", "1.1.1.1:443") // network is down defer f.Close() fmt.Println(err) }()
Что будет на экране?
Anonymous Quiz
12%
<nil>
47%
dial tcp 1.1.1.1:443: connect: no route to host
26%
panic: runtime error: invalid memory address or nil pointer dereference
15%
(╯°益°)╯彡┻━┻
👍10👎5
👍8
Как вы, наверное, знаете команда Go раз в полгода проводит опросы сообщества и публикует довольно интересные результаты. Но уже какое-то время не было таких же глубоких опросов русскоязычного сообщества. Чаще их делают крупные компании, но часто это замаскированный сбор контактов для хайринга или исследования рынка для себя, с очень ограниченными публичными результатами. Ребята из Podlodka / Podlodka Go Crew решили это исправить и запустили неплохой опрос, обещая глубокий анализ результатов. Давайте поможем и им, и себе: https://survey.alchemer.eu/s3/90588566/Go-2023
👍7👎3
👍18👎1
Создатель Rubinius’а внезапно среди авторов нового поста: https://go.dev/blog/wasi
👍2👎1