
Про raii, один гофер мне сказал, что вместо в go 2.0 обещают дженерики с With<T>(func() error), это должно смягчить проблему, но зато появляется лапша из коллбеков) Плюс при работе с объектом мне всё равно надо самому напрягаться и смотреть, надо ли с ним использовать этот With или нет. В теории, линтеры могли бы ловить проблемы типа отсутствия defer obj.Close(), но сейчас они этого не делают и вроде даже понятно, почему: сложно сформулировать какое-то правило, которое бы не страдало от высокого рейта false positive/false negative. Но вообще, на мой вкус, это перекладывание ответственности на линтер не есть хорошо - лучше пусть будет деструктор на уровне языка)
Про захват переменных, линтер иногда что-то такое отлавливает, иногда нет, по-разному бывает)
Про nullability, кажется, можно любо включить режим паранойи и проверять везде и всё, либо положить болт, либо выбрать какой-то вариант посередине. Если код мой собственный для моего же пользования, я предпочитаю делать вид, что null initialization не бывает, и везде инстанциирую через функции а-ля NewFoo(...). Пару раз меня такое подводило кстати :(