Butuh Script: Go Language

BUTUH SCRIPT

Go Language Chanel - Penghubung Antar Goroutine

Chanel adalah sebuah fasilitas yang tersedia pada GO lang yang berfungsi sebagai penghubung antar goroutine yang dibuat dengan menggunakan keyword  make  dan  chan  . Mekanisme pengiriman chanel adalah dengan mengirim dan menerima data melalui chanel tersebut.



Perlu digaris bawahi, Goroutine pengirim dan penerima harus berada pada chanel yang berbeda atau disebut buffered chanel. Pengiriman dan peneriman pada chanel ini bersifat blocking atau Synchronous. Ilustrasinya kurang lebih seperti berikut 

Penerapan Chanel

Dalam penerapannya, chanel merupakan sebuah variabel yang dibuat dengan menggunakan keyword  make  dan  chan . Variabel channel disini memiliki peran sebagai pengirim dan penerima data. 

Langsung saja, berikut adalah contoh program yang menggunakan chanel. 3 buah goroutine akan dieksekusi dengan proses pengiriman data melalui chanel. Data tersebut akan diterima 3 kali pada goroutine utama (  main  ). 

[code] package main

import "fmt"
import "runtime"

func main()  {
  runtime.GOMAXPROCS(2)

  var pesan = make(chan string)

  var sayHelloTo = func(who string)  {
    var data = fmt.Sprintf("hello %s", who)
    pesan <- data
  }

  go sayHelloTo("Chelud Wikanti Via")
  go sayHelloTo("Chalid Ade Rahman")
  go sayHelloTo("Chindy Via Roshita")

  var message1 = <- pesan
  fmt.Println(message1)

  var message2 = <- pesan
  fmt.Println(message2)

  var message3 = <- pesan
  fmt.Println(message3)
}
[/code]


Pada listing program diatas, variabel  message  dideklarasikan bertipe  chanel string . Pembuatan chanel yaitu dengan menuliskan keyword  make  dengan isi keyword  chan  diikuti dengan tipe data chanel yang diinginkan. Dalam listing program diatas dapat kita lihat pada sintaks berikut

var pesan = make(chan string)

Variabel  pesan  pada kode diatas akan menampung sebuah inputan string dengan isi "hello" yang disiapkan oleh sebuah closure dengan nama sayHelloTo. Tanda  <-  yang dituliskan di sebelah kiri nama variabel, menunjukan terjadi proses pengiriman data dari variabel yang berada di kanan menuju variabel yang berada pada sebelah kiri. Perhatikan baris berikut :


  var sayHelloTo = func(who string)  {
    var data = fmt.Sprintf("hello %s", who)
    pesan <- data
  }

Pada listing program diatas juga, Fungsi  sayHelloTo  dieksekusi sebanyak tiga kali sebagai goroutine berbeda. Menjadikan program ini berjalan secara asynnchronous atau tidak beraturan dan tidak saling tunggu. Dapat kita lihat pada baris berikut :


  go sayHelloTo("Chelud Wikanti Via")
  go sayHelloTo("Chalid Ade Rahman")


  go sayHelloTo("Chindy Via Roshita")

Seperti yang kita ketahui, perintah  go  menandakan perintah tersebut dijalankan sebagai goroutine. Dari ketiga fungsi tersebut, goroutine paling awal akan mengirim data dan diterimadatanya oleh variabel  message1 . Tanda  <-  menunjukan bahwa data dari sebelah kanan dikirim menuju variabel sebelah kiri dan disimpan. 

var message1 = <- pesan

fmt.Println(message1)

Penerimaan ini bersifat blocking, sehingga statement  var message1 = <- pesan  berarti data tidak akan diesekusi sebelum data dikirim lewat chanel. Ketiga goroutine tersebut akan menerima data secara berurutan oleh  message1 , message2  , message3  kemudian ditampilkan kurang lebih seperti berikut. 



Dari hasil output diatas, dapat Anda lihat bahwa eksekusi program tidak menghasilkan output yang sama. Hal ini dikarenakan, meski penerimaan data pada fungsi  sayHelloto  berurutan. Proses pengiriman data dari ketiga goroutine tersebut berbeda. Kita tidak tahu mana yang dieksekusi terlebih dahulu. Goroutine yang dieksekusi lebih awal, datanya akan diterima dan dimunculkan lebih awal. 

Namun dengan menggunakan chanel, proses blocking tidak perlu lagi menggunkaan  fmt.scanf(). seperti yang kita pelajari sebelumnya tentang goroutine. Chanel bersifat blocking sehingga dapat digunakan untuk mengantisipasi jika ada goroutine utama selesai lebih dahulu.   

Download Source File

Go Lang Scanln() - Cara Mudah Input Data ke Variabel Go Language

Fungsi Scanln() adalah sebuah fungsi yang digunakna untuk menginputkan data kedalam sebuah variabel yang telah di deklarasikan. Fungsi ini tentu sangat penting dan hampir selalu digunakan pada setiap program yang dibuat.


Tentu saja perintah  Scanln()  tidak asing lagi bagi para programer C, karna merupakan turunan dari perintah  Scanf()  yang memiliki fungsi sama yaitu input data ke dalam variabel. Sebenarnya pada golang fungsi  Scanf()  juga ada, perbedaannya akan dijelaskan pada postingan selanjutnya. 

Contoh : 

func Scanln(a ....interface{}) (n int, err error)

Kode di atas adalah skema fungsi menggunakan  fmt.Scanln() . Dari fungsi diatas, terlihat bahwa fungsi ini dapat menampung parameter yang bertipe  interface()  yang berjumlah tak terbatas. Dengan ketentuan, setiap parameter akan menampung karakter - karakter yang di pisah dengan tanda spasi. Untuk lebih jelasnya perhatikan listing program berikut : 

package main

import "fmt"

func main()  {
  var s1, s2, s3 string
  fmt.Scanln(&s1, &s2, &s3)

  //Inputan User "Chalid Ade Rahman"
  fmt.Printf("\nHasil Output : \n")

  fmt.Println(s1) //Chalid
  fmt.Println(s2) //Ade
  fmt.Println(s3) //Rahman

}

Dapat dilihat pada program diatas, Anda dapat menampung inputan text  Chalid Ade Rahman  kedalam 3 buah variabel yaitu s1, s2, dan s3. Apabila dijalankan maka tampilan program tersebut kurang lebih seperti berikut :




Go Lang Goroutine - Eksekusi Dua Thread Sekaligus

Golang adalah salah satu program yang dapat mengeksekusi dua Thread sekaligus. Artinya dalam satu file dapat menjalankan lebih dari satu Thread bersamaan. Berbeda dengan bahasa program pada umumnya yang hanya menjalankan satu Thread dalam satu file secara berurutan dari atas ke bawah.


Goroutine merupakan salah satu metode yang dipakai dalam go. Metode ini dapat dikatakan sebagai native thread yang berisikan sangat banyak goroutine. Goroutine pada go language sangat ringan, hanya dibutuhkan sekitar 2kB memori saja untuk satu goroutine. Tak hanya itu, Eksekusi goroutine pada go juga bersifat asychronous, yang menjadikan program tidak saling tunggu dengan goroutine lain.

Penerapan Goroutine

Dalam GO language, proses yang akan dieksekusi dengan goroutine harus dibungkus kedalam sebuah fungsi dan penambahan sintax  go  didepannya. Sintax tersebutlah yang menandakan bahwa fungsi tersebut dideteksi sebagai goroutin baru.

Berikut adalah contoh penerapan goroutine sederhana pada Go Lang. Program dibawah ini akan dieksekusi sebanyak 10 baris dimana 5 baris baris dieksekusi dengan cara biasa, dan 5 baris lainya dieksekusi dengan menggunakan goroutine.

package main

import "fmt"
import  "runtime"

func print(batas int, pesan string) {
  for i := 0; i < batas; i++ {
    fmt.Println((i+1), pesan)
  }
}

func main() {
  runtime.GOMAXPROCS(2)

  go print(5, "Halo Namaku Chalid")
  print(5, "Apa Kabar")

  var input string
  fmt.Scanln(&input)
}

Dalam kode tersebut,  runtime.GOMAXPROC(n)  digunakan untuk menentukan banyak prosesor yang diaktifkan. Prosesor disini artinya adalah thread yang aktif dalam listing program tersebut. Dalam program ini, ada dua prosessor yang dijalankan. Satu untuk menjalankan program seperti biasa dan satunya menjalankan program dalam goroutine. 


Pembuatan goroutine baru pada program diatas ditandai dengan sintax  go . Contohnya pada sintax berikut   go print(5, "Halo Namaku Chalid")  . Pada sintax tersebut fungsi  print()  dieksekusi sebagai goroutine baru. 


Fungsi  fmt.Scanln()  digunakan sebagai blocking, artinya program akan berhenti pada baris tersebut hingga user menekan tombol enter. Hal ini sangat perlu dilakukan karena adanya kemungkinan perbandingan waktu eksekusi antara goroutine  print()  dengan goroutine utama  main() . Jika hal tersebut terjadi, maka goroutine yang belum selesai secara paksa harus dihentikan karena goroutine utama telah selesai dijalankan. 

Hasil eksekusinya kurang lebih seperti berikut :



















Dapat dilihat, output pada tampilan diatas tidak selalu sama meski dalam satu listing program yang sama. Bisa jadi urut seperti tampilan pertama, bisa jadi selang seling atau tidak beraturan. Hal ini dikarenakan program dieksekusi 2 kali tanpa harus saling menunggu. Goroutinge mana yang dieksekusi terlebih dahulu bergantung dari kedua prosesor tersebut.

Ini Dia Alasan Mengapa Programer Wajib Belajar Go Language

Go Language (go lang) adalah sebuah bahasa pemrograman yang dikembangkan dari bahasa C  dengan mengkombinasikan bebearapa bahasa pemrograman lain seperti Pascal, Modula, Oberon, serta penambahan ide - ide bahasa pemrograman seperti Newsqueak dan Limdo.  



Menurut sejarahnya, Go Language pertama kali diumumkan pada tahun 2009. Bahasa pemrograman ini dikembangkan oleh tiga pekerja dari perusahaan besar Google. Ketiga pekerja tersebut yaitu Robert Griesemer, Ken Thompson, dan Rob Pike. Tujuan pengembangan Go Language adalah menciptakan sebuah bahasa pemrograman yang lebih efisien, ringan, sederhana, dan dapat diandalakan. Hal ini terbukti dari adanya perusahaan - perusahaan besar yang mengadopsi dan mengaplikasikan Go Lang pada aplikasi - aplikasinya seperti Dropbox, SoundCloud, CloudFlare, Docker, Cloud Foundry, dan Google sendiri. 

Go lang memiliki banyak sekali daya tarik dan kelebihan yang membuat para developer berlomba - lomba menguasai dan mengembangkan bahasa pemrograman ini.  Adapun Kelebihan Go lang diantaranya : 

Fast

Go lang terkenal sebagai bahasa pemrograman yang memiliki proses compiling yang cepat. Go lang terkenal sebagai compiled language yang tidak membiarkan seorang developer menghamburkan varibel dan data - data import. Semua variabel dan data import harus memiliki fungsi dan dijalankan, Sehingga tidak akan ada sintax baik variabel, fungsi, data - data import yang tidak terpakai ( hanya ditulis namun tidak digunakan / tak berfungsi). Dengan begitu tentu dapat dibanyangkan betapa efektif program go lang yang tentu juga berpengaruh terhadap kecepatan akses program go lang. 

Concurrent Programing

Salah satu kelebihan go lang adalah kemampuannya yang dapat menyelaraskan konsep rutinitas pekerjaan (goroutines), Konsep Channels singkornisasi komunikasi, serta pengelolaan banyak jalur bersamaan dengan lebih baik. Hal ini dikarenakna concurrency yang tertanam pada bahasa go lang itu sendiri. Sehingga seberapa banyakpun data yang masuk, akan di filter dan transmisikana dengan sangat baik. 

Clean Code

Go lang juga termasuk bahasa pemrograman yang bersih dan rapi. Para developer akan dipaksa menggunakan aturan penulisan serta methodologi yang sesuai dengan ketentuan go lang itu sendiri. Aturan - aturan ini, akan membuat para developer memahami tentang konsep clean code sesuangguhnya. Untuk apa clean code ? Bahasa pemrograman yang rapi, selain agar mudah dalam proses maintenance, juga berpengaruh terhadap kecepatan proses compileling.

Software Helper

Alat bantu program atau software helper adalah kelengkapan yang digunakan untuk membangun program, misal untuk membangun aplikasi java, Anda wajib menginstal Eclipse atau Netbeans. Alat bantu seperti ini tentu tidak efektif. Disamping sizenya yang besar, sumber daya untuk menjalankan program tersebut juga dapat dikatakan cukup besar. 

Namun tidak dengan go lang. Alat bantu untuk membuat aplikasi go lang mudah dan sangat bersahabat dengan sumber daya. tidak membutuhkan size yang besar dalam installasinya. Sehingga Anda tetap dapat membuat program yang sangat kompleks tanpa takut komputer kehabisan sumber daya. 

Community Helper

Dukungan komunitas pecinta go lang kini uga semakin banyak. Sehingga memudahkan para developer untuk terus berkembang. Meski go lang baru terkenal di tahun 2016, namun komunitas go lang sudah sangat banyak. Dukungan komunitas yang baik akan membuat programer go tidak kerepotan jika ada troble yang dihadapi.