Primero algunos antecedentes. La gramática formal de Go utiliza punto ";"
y coma como terminadores en muchas producciones, pero los programas de Go pueden omitir la mayoría de ellos (y deberían tener una fuente más clara y fácil de leer; gofmt
también elimina puntos y comas innecesarios).
La especificación enumera las reglas exactas. Especificaciones: punto y coma:
La gramática formal usa punto y coma ";" como terminadores en una serie de producciones. Los programas Go pueden omitir la mayoría de estos puntos y comas utilizando las siguientes dos reglas:
Cuando la entrada se divide en tokens, se inserta automáticamente un punto y coma en el flujo de tokens inmediatamente después del token final de una línea si ese token es
Para permitir que las declaraciones complejas ocupen una sola línea, se puede omitir un punto y coma antes de un ")" o "}" de cierre.
Entonces, como puede ver si inserta un carácter de nueva línea después del paréntesis )
, ;
se insertará un punto y coma automáticamente y, por lo tanto, la línea siguiente no se tratará como la continuación de la línea anterior. Esto es lo que sucedió en su caso, por lo que la siguiente línea que comienza con .Scan(&ReadUser.ID,...
le dará un error en tiempo de compilación, ya que esta situación por sí sola (sin la línea anterior) es un error en tiempo de compilación:syntax error: unexpected .
Por lo tanto, puede romper su línea en cualquier punto que no entre en conflicto con las reglas enumeradas en el punto 1.
anterior.
Normalmente, usted puede romper sus líneas después de la coma ,
, después de la apertura entre paréntesis, por ejemplo (
, [
, {
, y después de un punto .
que puede estar haciendo referencia a un campo o método de algún valor. También puede romper su línea después de los operadores binarios (aquellos que requieren 2 operandos), por ejemplo:
i := 1 +
2
fmt.Println(i) // Prints 3
Una cosa que vale la pena señalar aquí es que si tiene una estructura, corte o mapa literal que enumera los valores iniciales y desea romper la línea después de enumerar el último valor, debe poner una coma obligatoria ,
aunque este sea el último valor y no seguirán más, por ejemplo:
s := []int {
1, 2, 3,
4, 5, 6, // Note it ends with a comma
}
Esto es para cumplir con las reglas del punto y coma, y también para que pueda reorganizar y agregar nuevas líneas sin tener que ocuparse de agregar / quitar la coma final; por ejemplo, puede simplemente intercambiar las 2 líneas sin tener que eliminar y agregar una nueva coma:
s := []int {
4, 5, 6,
1, 2, 3,
}
Lo mismo se aplica cuando se enumeran los argumentos para una llamada de función:
fmt.Println("first",
"second",
"third", // Note it ends with a comma
)