¿Qué consejos generales tienes para jugar al golf en Go? Soy nuevo en Code Golfing y busco ideas que se puedan aplicar a los problemas de code golf en general que sean al menos algo específicos para Go.
Por favor, mantenga un consejo por respuesta.
¿Qué consejos generales tienes para jugar al golf en Go? Soy nuevo en Code Golfing y busco ideas que se puedan aplicar a los problemas de code golf en general que sean al menos algo específicos para Go.
Por favor, mantenga un consejo por respuesta.
Respuestas:
Inspirado por la respuesta de @ EMBLEM aquí .
Puede colocar las funciones de un paquete en el espacio de nombres global cuando las importe de la siguiente manera:
package main
import ."fmt"
func main() {
Printf("Hello World!")
}
Puede nombrar paquetes como desee cuando los importe.
package main
import f "fmt"
func main() {
f.Printf("Hello World\n")
}
Aprendí esto aquí .
import ."fmt"
y luego Println
y el resto de fmt
las funciones están en el espacio de nombres global. Además, no necesita punto y coma. Nunca, a menos que tenga varias declaraciones en una línea
Declarando Múltiples Variables:
i,s:=0,""
var(i int;s string)
Int de conversión de cadena: (limitado pero a veces útil)
n:=byte("9"[0])-48 // actual type is uint8
n,_:=strconv.Atoi("9")
Y viceversa
s:=string(9+48)
s:=strconv.Itoa(9)
fmt.Sprint
es probable que guarde bytes strconv.Atoi
, porque es probable que fmt
ya haya importado .
strconv
estaba allí solo para mostrar cuál sería el código de golf en el código normal.
El compilador Go tiene funciones print
y println
funciones predefinidas que no requieren importar fmt, así que en lugar de esto.
package main
import."fmt"
func main(){Printf(`Hello World
`)}
Puedes escribir esto.
package main
func main(){print(`Hello World
`)}
Tenga en cuenta que esto se envía a STDERR.
Muchas cosas en el bucle for range son opcionales.
Versión estándar:
for i,v:=range a{
// Do stuff
}
Si i
, v
ya se ha definido y se puede sobrescribir:
for i,v=range a{
// Do stuff
}
Si no te importa el valor:
for i:=range a{
// Do stuff
}
Si no le importa el valor y i
ya se ha definido:
for i=range a{
// Do stuff
}
Si no le importa el índice o el valor:
for range a{
// Do stuff
}
Si quieres un bucle infinito:
for{
// Do stuff
}
Puede colocar cualquier número de llaves de apertura en una línea, pero una línea que contiene llaves de apertura puede contener como máximo una llave de cierre.
Correcto:
func main(){if true{switch{case 1==1:for{break
}}}}
También correcto:
func main(){if true{switch{case 1==1:for{break}
}}}
También correcto:
func main(){if true{switch{case 1==1:for{
break}}}}
Incorrecto:
func main() {
if true{for{break}}
}
Go tiene diferente precedencia de los operadores para operaciones de bits, <<
, >>
, &
, etc por lo general tienen menor precedencia que +
y -
en la mayoría de los idiomas, pero en Ir tienen la misma precedencia que *
y /
.
Precedence Operator
5 * / % << >> & &^
4 + - | ^
3 == != < <= > >=
2 &&
1 ||
Esto podría usarse para guardar algunos paréntesis.
La mayoría de los idiomas:
(a&b)*c
Ir:
a&b*c
Go
etiqueta, pero entonces, ¿se está utilizando Go para jugar al golf aquí?