Sintaks Dasar
Sintaks dasar Go sangat sederhana dan mudah dipahami mari kita mulai dengan contoh paling sederhana.
package main
import "fmt"
func main() {
fmt.Println("Hello Dunia!")
}Kata kunci
packagemendeklarasikan file go mana yang termasuk dalam paket tersebut file entri harus dideklarasikan sebagai paketmainfungsi entri adalah fungsimainsaat membuat paket dan fungsi kustom penamaan harus dihindari agar tidak bentrok dengan ini.importadalah kata kunci untuk mengimpor diikuti dengan nama paket yang diimpor.funcadalah kata kunci deklarasi fungsi yang digunakan untuk mendeklarasikan sebuah fungsi.fmt.Println("Hello Dunia!")adalah sebuah pernyataan yang memanggil fungsiPrintlndi bawah paketfmtuntuk melakukan output.
Di atas adalah pengantar sintaks sederhana berikut ini adalah memahami konsep di dalamnya secara lebih mendalam.
Paket
Di Go program dibangun dengan menghubungkan paket bersama-sama. Unit paling dasar untuk mengimpor di Go adalah paket bukan file .go. Paket sebenarnya adalah sebuah folder dalam bahasa Inggris package paket berbagi semua variabel konstanta dan semua tipe yang didefinisikan di dalamnya. Gaya penamaan paket disarankan menggunakan huruf kecil semua dan harus sesingkat mungkin.
Visibilitas
Seperti yang disebutkan sebelumnya paket berbagi semua variabel konstanta dan semua tipe yang didefinisikan di dalamnya tetapi untuk paket luar tidak selalu demikian terkadang Anda tidak ingin orang lain mengakses tipe tertentu jadi perlu mengontrol visibilitas. Anda mungkin pernah melihat kata kunci seperti Public Pravite di bahasa OOP lain tetapi di bahasa Go tidak ada ini cara Go mengontrol visibilitas sangat sederhana aturannya adalah sebagai berikut
- Nama dimulai dengan huruf huruf besar adalah tipe/variabel/konstanta publik
- Nama dimulai dengan huruf kecil atau garis bawah adalah tipe/variabel/konstanta privat
Misalnya contoh di bawah ini konstanta MyName adalah publik sedangkan konstanta mySalary adalah privat.
package example
// Publik
const MyName = "jack"
// Privat
const mySalary = 20_000Aturan visibilitas ini berlaku di seluruh bahasa Go di mana saja.
Mengimpor
Mengimpor paket untuk menggunakan tipe/metode/fungsi/variabel dalam paket tersebut sintaks mengimpor adalah import ditambah nama paket
package main
import "example"Saat mengimpor beberapa paket Anda dapat menulis seperti ini
package main
import "example"
import "example1"Atau bisa juga dengan tanda kurung metode di bawah ini lebih umum digunakan dalam praktik.
package main
import (
"example"
"example1"
)Jika ada nama paket yang duplikat atau nama paket yang kompleks Anda juga dapat memberikan mereka nama alias
package main
import (
e "example"
e1 "example1"
)Ketika alias adalah garis bawah _ itu adalah impor anonim paket yang diimpor secara anonim tidak dapat digunakan ini biasanya dilakukan untuk memuat fungsi init di bawah paket tetapi tidak perlu menggunakan tipe dalam paket contoh umum adalah mendaftarkan driver database tetapi Anda tidak perlu menggunakan driver secara manual.
package main
import (
e "example"
_ "mysql-driver-go"
)Setelah mengimpor saat ingin mengakses tipe dalam paket akses melalui namaPaket.identifier seperti contoh di bawah ini jika Anda mencoba mengakses tipe privat kompiler akan memberitahu Anda bahwa tidak dapat diakses.
package main
import (
"example"
"fmt"
)
func main() {
fmt.Println(example.MyName)
}Ada cara impor khusus yaitu mengimpor semua tipe dalam paket ke ruang lingkup paket saat ini dengan cara ini tipe yang diimpor tidak lagi memerlukan operator . untuk mengakses tetapi jika ada tipe dengan nama yang sama tidak akan bisa dikompilasi.
package main
import (
. "example"
)WARNING

Di Go tidak dapat melakukan impor siklik baik langsung maupun tidak langsung. Misalnya paket A mengimpor paket B paket B juga mengimpor paket A ini adalah impor siklik langsung paket A mengimpor paket C paket C mengimpor paket B paket B mengimpor paket A lagi ini adalah impor siklik tidak langsung jika ada impor siklik tidak akan bisa dikompilasi.
Paket Internal
Di Go disepakati bahwa paket bernama internal dalam paket adalah paket internal paket luar tidak akan dapat mengakses konten apa pun dalam paket internal jika tidak maka tidak akan bisa dikompilasi lihat contoh di bawah ini.
/home/user/go/
src/
crash/
bang/ (kode go dalam paket bang)
b.go
foo/ (kode go dalam paket foo)
f.go
bar/ (kode go dalam paket bar)
x.go
internal/
baz/ (kode go dalam paket baz)
z.go
quux/ (kode go dalam paket main)
y.goDari struktur file dapat diketahui bahwa paket crash tidak dapat mengakses tipe dalam paket baz.
Komentar
Go mendukung komentar satu baris dan komentar multi baris disarankan untuk memberi jarak satu spasi antara komentar dan konten misalnya
// Ini adalah paket main
package main
// Mengimpor paket fmt
import "fmt"
/*
*
Ini adalah fungsi utama fungsi main
*/
func main() {
// Ini adalah sebuah pernyataan
fmt.Println("Hello Dunia!")
}Identifier
Identifier adalah sebuah nama yang digunakan untuk penamaan paket penamaan fungsi penamaan variabel dll aturan penamaannya adalah sebagai berikut
- Hanya dapat terdiri dari huruf angka dan garis bawah
- Hanya dapat dimulai dengan huruf dan garis bawah
- Membedakan huruf besar dan kecil secara ketat
- Tidak dapat duplikat dengan identifier yang sudah ada yaitu keberadaan unik dalam paket
- Tidak dapat bentrok dengan kata kunci built-in Go apa pun
Di bawah ini adalah daftar semua kata kunci built-in Anda juga dapat pergi ke Referensi Manual-Identifier untuk melihat lebih banyak detail
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return varOperator
Di bawah ini adalah prioritas operator yang didukung dalam bahasa Go Anda juga dapat pergi ke Referensi Manual-Operator untuk melihat lebih banyak detail.
Precedence Operator
5 * / % << >> & &^
4 + - | ^
3 == != < <= > >=
2 &&
1 ||Ada satu hal yang perlu diperhatikan Go tidak memilih ~ sebagai operator negasi tetapi menggunakan kembali simbol ^ ketika dua angka menggunakan ^ misalnya a^b itu adalah operator XOR hanya ketika menggunakan satu angka misalnya ^a maka itu adalah operator negasi. Go juga mendukung operator penugasan yang ditingkatkan sebagai berikut.
a += 1
a /= 2
a &^= 2TIP
Bahasa Go tidak memiliki operator increment dan decrement mereka diturunkan menjadi pernyataan statement dan ditetapkan hanya dapat berada di belakang operand jadi tidak perlu lagi bingung dengan masalah seperti i++ dan ++i.
a++ // Benar
++a // Salah
a-- // BenarSatu hal lagi adalah mereka tidak lagi memiliki nilai pengembalian sehingga penulisan pernyataan seperti a = b++ adalah salah.
Literal
Literal menurut terminologi ilmu komputer adalah simbol yang digunakan untuk mengekspresikan nilai tetap dalam kode sumber juga disebut nilai literal. Kedua nama ini memiliki arti yang sama apa yang ditulis nilainya adalah itu nilainya adalah nilai "secara harfiah".
Literal Integer
Untuk memudahkan pembacaan diperbolehkan menggunakan garis bawah _ untuk membagi angka tetapi hanya diperbolehkan digunakan setelah simbol prefix dan di antara angka.
24 // 24
024 // 24
2_4 // 24
0_2_4 // 24
10_000 // 10k
100_000 // 100k
0O24 // 20
0b00 // 0
0x00 // 0
0x0_0 // 0Literal Floating Point
Dengan prefix yang berbeda dapat mengekspresikan floating point dengan basis yang berbeda
0.
72.40
072.40 // == 72.40
2.71828
1.e+0
6.67428e-11
1E6
.25
.12345E+5
1_5. // == 15.0
0.15e+0_2 // == 15.0
0x1p-2 // == 0.25
0x2.p10 // == 2048.0
0x1.Fp+0 // == 1.9375
0X.8p-0 // == 0.5
0X_1FFFP-16 // == 0.1249847412109375
0x15e-2 // == 0x15e - 2 (pengurangan integer)Literal Kompleks
0i
0123i // == 123i
0o123i // == 0o123 * 1i == 83i
0xabci // == 0xabc * 1i == 2748i
0.i
2.71828i
1.e+0i
6.67428e-11i
1E6i
.25i
.12345E+5i
0x1p-2i // == 0x1p-2 * 1i == 0.25iLiteral Karakter
Literal karakter harus diapit dengan tanda kutip tunggal '' karakter di Go sepenuhnya kompatibel dengan utf8.
'a'
'ä'
'你'
'\t'
'\000'
'\007'
'\377'
'\x07'
'\xff'
'\u12e4'
'\U00101234'Karakter Escape
Karakter escape yang tersedia di Go
\a U+0007 simbol bel
\b U+0008 simbol backspace
\f U+000C simbol form feed
\n U+000A simbol baris baru
\r U+000D simbol carriage return
\t U+0009 simbol tab horizontal
\v U+000B simbol tab vertikal
\\ U+005C escape backslash
\' U+0027 escape tanda kutip tunggal (escape ini hanya valid dalam karakter)
\" U+0022 escape tanda kutip ganda (escape ini hanya valid dalam string)Literal String
Literal string harus diapit dengan tanda kutip ganda "" atau tanda kutip terbalik `` (string tanda kutip terbalik tidak mengizinkan escape)
`abc` // "abc"
`\n
\n` // "\\n\n\\n"
"\n"
"\"" // `"`
"Hello, world!\n"
"今天天气不错"
"日本語"
"\u65e5本\U00008a9e"
"\xff\u00FF"Fungsi
Cara deklarasi fungsi di Go dilakukan melalui kata kunci func mirip dengan sebagian besar bahasa
func main() {
println(1)
}Namun ada dua perbedaan fungsi di Go yang pertama adalah tipe parameter di belakang seperti di bawah ini
func Hello(name string) {
fmt.Println(name)
}Perbedaan kedua adalah nilai pengembalian ganda dan bisa带有 nama
func Pos() () (x, y float64) {
...
}Gaya
Tentang gaya pengkodean Go memaksa semua orang untuk menyatukan gaya yang sama Go resmi menyediakan alat pemformatan gofmt dapat digunakan melalui baris perintah alat pemformatan ini tidak memiliki parameter pemformatan yang dapat diteruskan hanya dua parameter yang hanya output proses pemformatan jadi sama sekali tidak mendukung kustomisasi yang berarti semua kode yang diformat melalui alat ini adalah gaya kode yang sama ini akan sangat mengurangi beban mental pemelihara jadi mengejar kepribadian dalam hal ini jelas bukan pilihan yang bijak.
Di bawah ini adalah beberapa aturan sederhana yang juga dapat diperhatikan saat menulis kode.
Kurung Kurawal Fungsi Baris Baru
Tentang apakah kurung kurawal setelah fungsi harus baris baru hampir setiap programmer dapat memberikan alasan mereka sendiri di Go semua kurung kurawal tidak boleh baris baru
// Contoh benar
func main() {
fmt.Println("Hello Dunia!")
}Jika Anda benar-benar melakukannya seperti di bawah ini
// Contoh salah
func main()
{
fmt.Println("Hello Dunia!")
}Kode seperti ini bahkan tidak bisa dikompilasi jadi Go memaksa semua programmer untuk tidak membuat kurung kurawal setelah fungsi baris baru.
Indentasi Kode
Go secara default menggunakan Tab yaitu karakter tab untuk indentasi hanya dalam beberapa situasi khusus akan menggunakan spasi.
Spasi Kode
Sebagian besar spasi di Go bermakna dari sudut tertentu ini juga mewakili bagaimana kompiler melihat kode Anda misalnya operasi matematika di bawah ini
2*9 + 1/3*2Seperti yang kita ketahui prioritas perkalian lebih tinggi daripada penjumlahan setelah diformat spasi antara simbol * akan terlihat lebih kompak yang berarti operasi dilakukan lebih dulu sedangkan spasi di sekitar simbol + lebih besar yang berarti operasi dilakukan nanti.
Penghilangan Kurung Kurawal
Di bahasa lain pernyataan if dan for biasanya dapat disingkat seperti di bawah ini
for (int i=0; i < 10; i++) printf("%d", i)Tetapi di Go tidak bisa Anda hanya dapat menulis satu baris tetapi harus menambahkan kurung kurawal
for i := 0; i < 10; i++ {fmt.Println(i)}Ekspresi Ternary
Go tidak memiliki ekspresi ternary jadi kode seperti di bawah ini tidak dapat dikompilasi
var c = a > b ? a : bMelalui artikel ini Anda dapat memiliki pemahaman awal tentang sintaks Go konten selanjutnya akan dijelaskan lebih rinci.
