Спочатку деякий фон. Формальна граматика Go використовує крапку з комою ";"
як закінчувач у багатьох виробництвах, але програми Go можуть опускати більшість із них (і вони повинні мати чіткіше, легко читабельне джерело; gofmt
також видаляє непотрібні крапки з комою).
У специфікації вказані точні правила. Специфікація: крапка з комою:
Формальна граматика використовує крапку з комою ";" як термінатори в ряді виробництв. Програми Go можуть опускати більшість із цих крапок з комою, використовуючи наступні два правила:
Коли вхід розбивається на маркери, крапка з комою автоматично вставляється в потік маркера відразу після остаточного маркера рядка, якщо цей маркер
Щоб дозволити складним операторам займати один рядок, перед крапкою ")" або "}" можна пропустити крапку з комою.
Отож, як ви можете бачити, якщо ви вставляєте символ нового рядка після дужок )
, крапка з комою ;
буде вставлена автоматично, тому наступний рядок не буде розглядатися як продовження попереднього рядка. Так трапилося у вашому випадку, і тому наступний рядок, що починається з .Scan(&ReadUser.ID,...
, дасть вам помилку під час компіляції, оскільки це самостійне (без попереднього рядка) є помилкою під час компіляції:syntax error: unexpected .
Таким чином, ви можете розірвати свою лінію в будь-який момент, який не суперечить правилам, переліченим у пункті 1.
вище.
Як правило , ви можете розбити ваші рядки після коми ,
, після відкриття дужки , наприклад (
, [
, {
, і після точки , .
яка може бути посилається на поле або метод якого - небудь значення. Ви також можете розбити свій рядок після двійкових операторів (тих, для яких потрібні 2 операнди), наприклад:
i := 1 +
2
fmt.Println(i) // Prints 3
Тут варто зауважити, що якщо у вас є структура, фрагмент або літерал картографії з переліком початкових значень, і ви хочете розбити рядок після перерахування останнього значення, ви повинні поставити обов’язкову кому, ,
хоча це останнє значення, і ні далі піде більше, наприклад:
s := []int {
1, 2, 3,
4, 5, 6, // Note it ends with a comma
}
Це має відповідати правилам крапки з комою, а також для того, щоб ви могли переставляти та додавати нові рядки, не дбаючи про додавання / видалення кінцевої коми; наприклад, ви можете просто поміняти місцями 2 рядки без необхідності видаляти та додавати нову кому:
s := []int {
4, 5, 6,
1, 2, 3,
}
Те саме стосується перерахування аргументів до виклику функції:
fmt.Println("first",
"second",
"third", // Note it ends with a comma
)