Apakah kelebihan dari bahasa pemrograman Golang (Go Language) ?

Golang (atau biasa disebut dengan Go) adalah bahasa pemrograman baru yang dikembangkan oleh perusahaan Google.

Apakah kelebihan dari bahasa pemrograman Golang (Go Language) ?

Golang (Go Language) adalah sebuah bahasa pemrograman yang dikembangkan oleh Google pada tahun 2007, kemudian Google memperkenalkannya kepada publik pada tahun 2009. Orang yang mendesain awal bahasa ini adalah Robert Griesemer, Rob Pike, dan Ken Thompson. Robert Griesemer adalah salah satu staff Google yang menangani Javascript Engine V8, Rob Pike sendiri adalah seorang Software Engineer yang berada dibalik bahasa pemrograman Limbo dan kini bekerja di Google, sedangkan Ken Thompson yang lebih dikenal dengan Ken dikalangan para hacker ini adalah penemu bahasa B yang merupakan predecessor dari bahasa C.

Bahasa pemrograman Go adaalah sebuah proyek Open Source untuk membuat programmers menjadi lebih produktif. Mekanisme Golang membuat bahasa ini menjadi mudah dipahami. Golang dapat mengcompile data dan run-time secara cepat.

Tujuan

Pada awalnya, Go adalah sebuah eksperimen Google untuk mendesain sebuah bahasa pemrograman baru yang dapat menyelesaikan masalah-masalah umum pada bahasa lain tetapi tidak melepaskan keunggulan yang sudah ada. Beberapa pengembangan Golang antara lain:

  • Dapat diubah ke sistem yang lebih besar
  • Produktif dan mudah dibaca tanpa banyak kata kunci perintah
  • Tidak membutuhkan tooling, tapi tetap dapat support
  • Mendukung networking dan multiprocessing

Desain Bahasa

Go dapat dikenali dengan tradisi bahasa C, tetapi ada banyak perubahan untuk memberikan kesan minimalis, ringkas dan simpel. Berikut ini adalah beberapa fitur Golang:

  • Sintaks berupa bahasa yang dinamis
  • Deklarasi dan inisailisasi variabel secara ringkas
  • Compile secara cepat
  • Dokumentasi package secara online
  • Spesifikasi bahasa yang simpel membantu programmer untuk mengingat

Keunggulan

  • Compiled dan tidak menggunakan intermediary code.

  • Concurrency at language level, bahasa Go mendukung concurrency dan komunikasi antar thread/proses tanpa perlu memahami kompleksitas implementasinya (mutex, synchronization).

  • Garbage Collected, artinya programmer tidak perlu menghapus alokasi memori secara manual, sehingga tidak akan terjadi memory leak.

  • Built in String and Map, artinya string dan array asosiatif merupakan tipe data yang didukung penuh oleh bahasa, bukan berupa library.

  • Safe-Pointer, artinya terdapat pemeriksaan akses pointer atau memory, tidak terdapat operasi pointer, sehingga tidak akan terjadi buffer overflow yang tidak terdeteksi.

  • No Type Hierarchy/Inheritance, artinya tidak terdapat hirarki tipe data, hanya terdapat Interface, selama tipe data mengimplementasikan fungsi tertentu, maka polymorphism dapat terjadi, pemeriksaan ini dilakukan saat compile bukan pada saat Runtime. Inheritance dapat diatasi dengan Embedding (Nameless Composition).

  • Builtin Code Formatting, pada saat compile, source code otomatis dirapikan sesuai konvensi oleh program gofmt.

  • Company Support, bahasa Go didukung oleh perusahaan besar (Google)

  • Small Memory Footprint, artinya program yang dibuat dengan bahasa ini menggunakan RAM relatif sedikit.

  • No Header Files, artinya tidak perlu pemisahan source code antara deklarasi dan implementasi.

  • Letter-case Visibility, artinya tidak membutuhkan keyword public/private, semua method dan tipe yang dimulai huruf besar adalah public.

  • Zeroed Memory, artinya setiap tipe data selalu memiliki default value 0.

  • No Exception, artinya tidak terdapat syntax khusus exception (try/catch), dapat diatasi dengan keyword defer (untuk menggantikan finally), dan multiple¬return¬values untuk mengembalikan error pemanggilan fungsi.

  • Autocomplete Daemon, artinya fitur autocomplete tidak perlu diimplementasikan dari awal oleh masing¬masing vendor IDE/text editor, tetapi berupa pemanggilan/koneksi ke program external (gocode).

  • No circular dependency, sehingga tidak membutuhkan header guard atau prototype fungsi/class, yang menyebabkan proses compile untuk project besar menjadi relatif lebih cepat.

  • No function/method overloading, sehingga pemanggilan fungsi tidak akan ambigu.

  • Statically Linked, artinya program yang dibuat pada bahasa Go tidak membutuhkan instalasi library/shared dependency (.dll, .so), sehingga lebih portable, dengan kerugian ukuran binary yang lebih besar.

  • Builtin Package Management, artinya terdapat program untuk menginstallkan otomatis library yang dibutuhkan (beserta dependency¬nya).

  • No Unsafe Low Level Code, artinya program yang dibuat tidak dapat menggunakan source code yang tidak aman (direct access ke memori).

Kekurangan

  • Generic Programming, pada bahasa Go menggunakan static typing, terdapat fitur¬fitur RTTI

  • Run-Time Type Information, tetapi tidak terdapat template atau generics. Ketidaktersediaan generics pada Go diatasi dengan program gen.

  • Immutable Types, artinya pada tipe data tertentu (string misalnya), setelah di¬isi tidak dapat diubah, hal ini baik untuk concurrency tetapi buruk bagi performa garbage collection.

  • No Operator Overloading, operator mampu meningkatkan writability, tetapi pada bahasa Go, diutamakan readability, sehingga fitur ini tidak diimplementasikan.

  • No Standard Document, bahasa pemrograman Go tidak memiliki dokumen spesifikasi yang telah distandarisasi.


Referensi

https://golang.org/
https://golang.org/doc/faq#Whats_the_origin_of_the_mascot
https://github.com/golang/go/wiki
https://talks.golang.org/2015/gophercon-goevolution.slide#19
http://www.javaworld.com/article/2929811/scripting-jvm-languages/whats-the-go-language-really-good-for.html
https://www.toptal.com/go/go-programming-a-step-by-step-introductory-tutorial