2016-08-28 1 views
3

Вот некоторые пример кода:Несогласованное форматирование кода Go?

func main() { 
    os.MkdirAll(outDir + id, 0755) 
    os.Create(outDir + id + "/txt") 
    os.OpenFile(outDir + id + "/" + ".tmp", os.OWRONLY|os_APPEND) 
    os.Stat(outDir + id + "/.tmp") 
} 

Ниже приведен вывод после форматирования либо go fmt или нажав Format на Go Playground:

func main() { 
    os.MkdirAll(outDir+id, 0755) 
    os.Create(outDir + id + "/txt") 
    os.OpenFile(outDir+id+"/"+".tmp", os.OWRONLY|os_APPEND) 
    os.Stat(outDir + id + "/.tmp") 
} 

пространств в os.MkdirAll() и os.OpenFile() удаляются, пока они не трогают в os.Create() и os.Stat(). Я бы ожидал, что форматирование будет идентичным.

Почему это происходит?

ответ

5

См: https://github.com/golang/go/issues/12720

gofmt использует пробелы вокруг бинарных выражений, чтобы выразить связывание силу. В зависимости от уровня вложенности пробелы удаляются.

Вы также можете найти их легко, выполнив поиск "gofmt inconsistent spaces". См. Также выпуск #1206, #1848, #1861, #7880 и #11497.