Bulan lalu kantor saya kedatangan CTO dari Go-Jek (Sheran Gunasekera), beliau sharing tentang beberapa masalah yang dialami oleh Go-Jek, salah satunya yaitu masalah concurrency, untuk menyelesaikan masalah ini mereka berniat migrasi ke Go. Karena penasaran saya juga mencoba untuk belajar Go.
Inti dari saya menulis blog ini lebih ke memberi pengenalan tentang Go, bukan untuk mengajari bagaimana full tentang Go. Karena saya bukan orang yang menggunakan Go dalam keseharian. Tapi saya harap kedepannya dapat merubah beberapa webservice kami ke Go. Kenapa saya tertarik untuk migrasi ke Go, mari kita lihat sejarah dari Go sendiri.
Go dibuat oleh Robert Griesemer, Rob Pike dan Ken Thompson pada tahun 2007, dan mulai dipublish tahun 2009. Idenya sendiri lahir dari kebutuhan untuk membuat suatu bahasa pemrogramman yang type safety dan portability. Dan beberapa tujuan lainnya :
- Gampang dipelajari
- Type Safety dan Memory Safety
- Gampang untuk Concurrency
- Adanya Garbage Collection
- Kompilasi yang cepat
Beberapa perusahaan besar yang telah menggunakan Go antara lain :
Untuk IDE sendiri beberapa IDE yang lazim digunakan oleh para developer telah mendukung Go, seperti :
Keseharian saya menggunakan beberapa dynamic language seperti Python dan Nodejs, ketika saya mencoba syntax Go cukup mudah untuk saya beradaptasi, namun walaupun demikian Go memiliki performa yang setara dengan C. Mari kita perhatikan beberapa hal yang membedakan Go dengan bahasa pemrogramman lainnya.
Syntax
Go tidak mengharuskan untuk menambahkan titik koma(;) pada setiap akhir dari baris kode. Untuk deklarasi sendiri ada beberapa cara diantaranya :
- nama variable diikuti oleh tipe datanya ex : var kata string
- variable juga bisa langsung diinisialisasi ex : angka := 10
Masih ingat ketika kita mengakses sebuah object biasanya ada property Public/Private, dimana yang memiliki proverty Private hanya bisa diakses oleh si object itu sendiri. Nah di Go sendiri yang membedakan Public dan Private adalah awal kata dari nama variable atau function tersebut. Ketika awal katanya merupakan huruf besar maka secara otomatis akan menjadi Public variable atau function. Sebaliknya untuk private cukup menggunakan awal katanya ke huruf kecil.
1 2 |
|
Go merupakan bahasa pemrogramman procedural, dimana Go tidak mempunyai feature class, overloading, dan inheritance.
Warning / Error
Go juga mempunya karakteristik yang unik tentang Error. Jika ada variable atau package yang tidak terpakai maka akan ada peringatan Error.
Control Structure
Hal yang menarik dari Go hanya memiliki 3 Control Structure :
- If Else
- Switch Case
- For
Untuk penulisan sendiri ada beberapa berbedaan seperti pada If Else kita bisa menginisialisasi variable pada kondisional statemen
1 2 3 |
|
Begitu pula untuk Switch Case, pada Go lebih fleksibel. Karena kita harus menentukan variable apa yang akan menjadi acuan Case.
1 2 3 4 5 6 7 8 |
|
Selain itu Switch Case pada Go juga tidak mempunyai break. jika kita mau mengindikasikan dari satu Case satu mau lanjut ke Case selanjutnya kita perlu menambahkan Kode fallthrough
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Dan yang paling menarik untuk metode pengulangan Go hanya memiliki satu control structure yaitu For, untuk membuat infinte loop kita bisa menuliskan sebagai berikut
1 2 3 |
|
Tipe Data
Berikut tipe data yang ada pada Go :
- Boolean : bool
- Numeric : uint8 to uint64, int8 to int64, uint, int, float32, float64,complex64, complex128, byte, rune
- String : string
- Array : [5]byte
- Slice : make([]int, 50, 100)
- Map : map[string]int
- Struct : struct
- Function : func
- Interface : interface
- Channel : chan
Kurang lebih sama seperti bahasa lainnya, namun ada beberapa perbedaan yang akan kita bahas.
Array
Array merupakan tipe data yang dapat menampung data dengan tipe data yang sama. Pada Go Array memiliki kapasitas yang tetap dimana kita tidak bisa menambahkan data melebihi kapasitas dari array tersebut. Mirip dengan tuple pada Python.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 |
|
Slice
Bisa dibilang Slice merupakan Array yang fleksibel, maksudnya adalah kapasitas dari Slice bisa berubah, baik bertambah ataupun berkurang. Jika Anda programmer Python, maka Slice ini mirip dengan list pada Python.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
Map
Map juga merupakan Array, jika pada Array dan Slice untuk mengakses menggunakan index, pada Map Anda dapat menggunakan key, atau sering disebut juga hash. Pada Python Map dikenal sebagai Dictionary.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 |
|
Struct
Jika Array merupakan kumpulan data dengan tipe data yang sama, Struct adalah kumpulan data dengan tipe data yang berbeda sesuai dengan apa yang kita define diawal. Hal ini sangat mirip dengan konsepnya Struct pada Bahasa C.
1 2 3 4 5 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 |
|
Function
Function merupakan kumpulan dari tipe data, control dan statement. Yang mana bisa mengembalikan value, tidak seperti bahasa pemrogramman pada umumnya, pada Go return value nya bisa lebih dari satu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 |
|
Interface
Go bukan bahasa berorientasi objek ‘klasik’. Dimana Go tidak mempunyai class dan metode inheritance. Interface sendiri lebih ke seperti Abstract Class dimana hanya berupa kumpulan metode/function.
1 2 3 4 5 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
1
|
|
Goroutines And Channel
Goroutines merupakan thread pada bahasa pemrogramman lainnya.
Do not use global variables or shared memory, they make your code unsafe for running concurrently
Channel sendiri merupakan alat komunikasi antara goroutines
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1
|
|
Selamat mencoba, jika Anda ingin belajar lebih lanjut dapat langsung mengunjungi situs dokumentasi dari Go