How to Go wrong
1.57K subscribers
11 photos
1 video
191 links
Download Telegram
Читать и умнеть: https://research.swtch.com/plmm
Загадка:


$ go list all | grep k8s.io/kubernetes

$ go list -m all | grep k8s.io/kubernetes
k8s.io/kubernetes v1.13.0

$ go mod why k8s.io/kubernetes
# k8s.io/kubernetes
(main module does not need package k8s.io/kubernetes)


Отгадка: https://github.com/golang/go/issues/27900
Оказывается, спецификация протокола MongoDB распространяется под лицензией СС Attribution-NonCommercial-ShareAlike, прямо запрещающей коммерческое использование, включая создание коммерческих СУБД и DBaaS’ов. Недавно они написали об этом явно: https://news.ycombinator.com/item?id=27908107 Но, как оказалось, эта лицензия была всегда.

Интересно, неужели Amazon DocumentDB и Azure CosmosDB делали чистую комнату?
Расс Кокс написал свои мысли про “make major versions optional in import paths”: https://github.com/golang/go/issues/44550#issuecomment-885324886

Но в этом большом вдумчивом сообщении мне больше всего понравился щелчок по носу Питеру Бургону:

> I have personally had what I consider to be substantial exposure to an enormous amount of Go code, due to my position in the OSS ecosystem, as well as my consulting work. That exposure includes, importantly, a huge amount of code maintained in private repositories. I have no way of knowing, but I suspect the only person in the Go community who may have seen more Go code than I have is Bill Kennedy. With that context, I can state without hesitation that the need to include two major versions of the same dependency in one compilation unit is extraordinarily rare, and in those rare circumstances that it does arise, it is almost always due to pathological conditions in the dependency graph.

This claim about needing multiple major versions being “extremely rare” is easily contradicted. Kubernetes depends on multiple major versions of github.com/russross/blackfriday and of gopkg.in/yaml. Even Peter's own Go-kit depends on both go.etcd.io/etcd/client/v2 and go.etcd.io/etcd/client/v3.
А давно у https://staticcheck.io такой весёлый подзаголовок на сайте?

EDIT: Он ещё и меняется. rm -rf $GOPATH – лучший.
Совет всем гоферам: никогда, никогда не игнорируйте ошибки, даже такие невозможные, как запись в bytes.Buffer.Write или encoding.BinaryMarshaler.MarshalBinary для тривиального типа. По закону подлости этот код будет скопирован и изменён так, что вместо bytes.Buffer будет net.Conn, вместо тривиального типа – сложный с type switch и default: return errors.New("unhandled type"), а обработка ошибок не добавится – ну работало ж до этого. И будете потом на другом конце сети и кодовой базы несколько часов источник проблемы искать.

Угадайте, откуда я это знаю.
А мог бы помочь!

Совместными усилиями довезли, наконец.
Forwarded from oleg_log (Oleg Kovalov)
brew никак не завезет 1.17 (https://github.com/Homebrew/homebrew-core/pull/83413) и если у вас тоже проблемы с ARM,то обновите x/sys https://github.com/hashicorp/consul/pull/10869