Tips umum apa yang Anda miliki untuk bermain golf di Go? Saya baru mengenal Code Golfing dan mencari ide yang dapat diterapkan pada masalah kode golf secara umum yang setidaknya agak spesifik untuk Go.
Harap simpan satu tip per jawaban.
Tips umum apa yang Anda miliki untuk bermain golf di Go? Saya baru mengenal Code Golfing dan mencari ide yang dapat diterapkan pada masalah kode golf secara umum yang setidaknya agak spesifik untuk Go.
Harap simpan satu tip per jawaban.
Jawaban:
Terinspirasi oleh jawaban @ EMBLEM di sini .
Anda bisa meletakkan fungsi paket di namespace global saat Anda mengimpornya seperti:
package main
import ."fmt"
func main() {
Printf("Hello World!")
}
Anda dapat memberi nama paket apa pun yang Anda suka saat mengimpornya.
package main
import f "fmt"
func main() {
f.Printf("Hello World\n")
}
Pelajari ini di sini .
import ."fmt"dan kemudian Printlndan sisanya dari fmtfungsi 's berada di namespace global. Anda juga tidak perlu titik koma. Pernah, kecuali jika Anda memiliki beberapa pernyataan pada satu baris
Nilai pengembalian yang dinamai dapat menyimpan beberapa byte. Sebagai contoh:
func x()string{
r:="" //Do stuff
return r}
Anda dapat menyimpan 3 byte dengan
func x()(r string){
//Do stuff
return}
Ini lebih berguna jika Anda perlu mendeklarasikan beberapa variabel di awal fungsi Anda.
Mendeklarasikan Banyak Variabel:
i,s:=0,""
var(i int;s string)
Int From String Conversion: (terbatas tetapi terkadang bermanfaat)
n:=byte("9"[0])-48 // actual type is uint8
n,_:=strconv.Atoi("9")
Dan sebaliknya
s:=string(9+48)
s:=strconv.Itoa(9)
fmt.Sprintkemungkinan akan menghemat byte strconv.Atoi, karena Anda kemungkinan fmtsudah mengimpor .
strconvada di sana hanya untuk menunjukkan apa kode golf akan menjadi kode normal.
Go compiler telah ditentukan sebelumnya printdan printlnfungsi yang tidak memerlukan impor fmt, jadi alih-alih ini.
package main
import."fmt"
func main(){Printf(`Hello World
`)}
Anda bisa menulis ini.
package main
func main(){print(`Hello World
`)}
Perhatikan bahwa ini output ke STDERR.
Banyak hal dalam loop rentang adalah opsional.
Versi standar:
for i,v:=range a{
// Do stuff
}
Jika i, vsudah ditentukan dan dapat ditimpa:
for i,v=range a{
// Do stuff
}
Jika Anda tidak peduli dengan nilai:
for i:=range a{
// Do stuff
}
Jika Anda tidak peduli dengan nilai dan isudah didefinisikan:
for i=range a{
// Do stuff
}
Jika Anda tidak peduli dengan indeks atau nilai:
for range a{
// Do stuff
}
Jika Anda ingin loop tak terbatas:
for{
// Do stuff
}
Anda dapat menempatkan sejumlah kawat gigi pembuka pada satu baris, tetapi garis yang berisi kawat gigi pembuka dapat memuat paling banyak satu kawat gigi penutup.
Benar:
func main(){if true{switch{case 1==1:for{break
}}}}
Benar juga:
func main(){if true{switch{case 1==1:for{break}
}}}
Benar juga:
func main(){if true{switch{case 1==1:for{
break}}}}
Salah:
func main() {
if true{for{break}}
}
Go memiliki prioritas operator yang berbeda untuk operasi bit, <<, >>, &, dll biasanya memiliki didahulukan lebih rendah dari +dan -dalam kebanyakan bahasa, tetapi di mana mereka memiliki hak yang sama seperti *dan /.
Precedence Operator
5 * / % << >> & &^
4 + - | ^
3 == != < <= > >=
2 &&
1 ||
Ini dapat digunakan untuk menyimpan beberapa tanda kurung.
Sebagian besar bahasa:
(a&b)*c
Pergi:
a&b*c
Gotag, tetapi kemudian, apakah Go bahkan digunakan untuk bermain golf di sini?