Go'da golf oynamak için hangi genel ipuçlarınız var? Code Golfing konusunda yeniyim ve genel olarak golfle ilgili sorunları çözmek için en azından bir şekilde Go'ya özgü olan fikirleri arayacağım.
Lütfen cevap başına bir ipucuna uyun.
Go'da golf oynamak için hangi genel ipuçlarınız var? Code Golfing konusunda yeniyim ve genel olarak golfle ilgili sorunları çözmek için en azından bir şekilde Go'ya özgü olan fikirleri arayacağım.
Lütfen cevap başına bir ipucuna uyun.
Yanıtlar:
Buradaki @ EMBLEM'in cevabından ilham alındı .
Bir paketin fonksiyonlarını global isim alanına şu şekilde koyabilirsiniz:
package main
import ."fmt"
func main() {
Printf("Hello World!")
}
Paketleri içe aktarırken ne istersen adlandırabilirsin.
package main
import f "fmt"
func main() {
f.Printf("Hello World\n")
}
Bunu burada öğrendim .
import ."fmt"ve sonra yapabilirsiniz ve Printlngeri kalan fmtfonksiyonlar global isim alanındadır. Ayrıca, noktalı virgül gerekmez. Hiç, bir hatta birden fazla
Birden Fazla Değişken Bildirmek:
i,s:=0,""
var(i int;s string)
Dize Dönüşümünden İnt: (sınırlı ama bazen yararlı)
n:=byte("9"[0])-48 // actual type is uint8
n,_:=strconv.Atoi("9")
Ve Versa
s:=string(9+48)
s:=strconv.Itoa(9)
fmt.SprintBüyük strconv.Atoiolasılıkla fmtzaten içe aktardığınız için baytları tasarruf etme olasılığı yüksektir .
strconvGolf kodunun normal kodda ne olacağını göstermek için orada olduğumu düşünüyorum .
Go derleyicisi önceden tanımlanmış printve printlnfmt almayı gerektirmeyen işlevler, bunun yerine.
package main
import."fmt"
func main(){Printf(`Hello World
`)}
Bunu yazabilirsin.
package main
func main(){print(`Hello World
`)}
Bunun STDERR'ye çıktığını unutmayın.
For range döngüsünde birçok şey isteğe bağlıdır.
Standart versiyon:
for i,v:=range a{
// Do stuff
}
Eğer i, vönceden tanımlanmış ve üzerine yazılabilir:
for i,v=range a{
// Do stuff
}
Değer umursamıyorsanız:
for i:=range a{
// Do stuff
}
Değer umursamıyorsanız ve izaten tanımlanmışsa:
for i=range a{
// Do stuff
}
Endeks veya değeri umursamıyorsanız:
for range a{
// Do stuff
}
Sonsuz bir döngü istiyorsanız:
for{
// Do stuff
}
Herhangi bir sayıda açılış parantezini bir satıra koyabilirsiniz, ancak açılış parantezleri içeren bir hat en fazla bir kapanış parantezi içerebilir.
Doğru:
func main(){if true{switch{case 1==1:for{break
}}}}
Ayrıca doğru:
func main(){if true{switch{case 1==1:for{break}
}}}
Ayrıca doğru:
func main(){if true{switch{case 1==1:for{
break}}}}
Yanlış:
func main() {
if true{for{break}}
}
Git bit işlemleri için farklı operatör önceliği vardır <<, >>, &vb genellikle daha düşük önceliğe sahip +ve -çoğu dilde, ama git de onlar aynı önceliğe sahiptir *ve /.
Precedence Operator
5 * / % << >> & &^
4 + - | ^
3 == != < <= > >=
2 &&
1 ||
Bu, bazı parantezleri kurtarmak için kullanılabilir.
Çoğu dil:
(a&b)*c
Gitmek:
a&b*c
GoEtiketi oluşturmak isteyebiliriz , fakat o zaman Go burada golf oynamak için bile kullanılıyor mu?