Önce biraz arka plan. Go'nun biçimsel dilbilgisi, ";"birçok yapımda sonlandırıcı olarak noktalı virgül kullanır , ancak Go programları bunların çoğunu atlayabilir (ve daha net, kolay okunabilir bir kaynağa sahip olmaları gerekir; gofmtayrıca gereksiz noktalı virgülleri kaldırır).
Spesifikasyon kesin kuralları listeler. Spec: Noktalı virgül:
Biçimsel dilbilgisi noktalı virgül ";" bir dizi yapımda sonlandırıcılar olarak. Go programları, aşağıdaki iki kuralı kullanarak bu noktalı virgüllerin çoğunu atlayabilir:
Girdi jetonlara bölündüğünde, bir satırın son jetonundan hemen sonra jeton akışına otomatik olarak bir noktalı virgül eklenir.
Karmaşık ifadelerin tek bir satırı işgal etmesine izin vermek için, ")" veya "}" kapanışından önce bir noktalı virgül atlanabilir.
Gördüğünüz gibi, parantezden sonra bir yeni satır karakteri eklerseniz ), ;otomatik olarak bir noktalı virgül eklenir ve böylece sonraki satır, önceki satırın devamı olarak değerlendirilmez. Sizin durumunuzda olan budur ve bu nedenle ile başlayan bir sonraki satır .Scan(&ReadUser.ID,...size derleme zamanı hatası verecektir çünkü bu tek başına (önceki satır olmadan) bir derleme zamanı hatasıdır:syntax error: unexpected .
Dolayısıyla, 1.yukarıdaki maddede listelenen kurallarla çelişmeyen herhangi bir noktada çizginizi kırabilirsiniz .
Genelde virgülden sonra çizgileri kırabilir ,sonra, açılış parantezi örneğin (, [, {, ve bir nokta sonrasında .bazı değerin bir alanı veya yöntemi referans olabilir. Ayrıca, ikili operatörlerden sonra (2 işlenen gerektiren) satırınızı da bölebilirsiniz, örneğin:
i := 1 +
2
fmt.Println(i)
Burada dikkat edilmesi gereken bir nokta, ilk değerleri listeleyen bir yapı veya dilim veya harita hazır bilgisine sahipseniz ve son değeri listeledikten sonra satırı kırmak istiyorsanız, bu son değer ,olmasına ve hayır daha fazlası takip edecek, örneğin:
s := []int {
1, 2, 3,
4, 5, 6,
}
Bu, noktalı virgül kurallarına uymak ve ayrıca son virgül eklemeye / çıkarmaya gerek kalmadan yeniden düzenleyip yeni satırlar ekleyebilmeniz içindir; örneğin, kaldırıp yeni bir virgül eklemek zorunda kalmadan 2 satırı kolayca değiştirebilirsiniz:
s := []int {
4, 5, 6,
1, 2, 3,
}
Aynısı, bir işlev çağrısına argümanlar listelenirken de geçerlidir:
fmt.Println("first",
"second",
"third",
)