Posts

Showing posts from 2014

Benchmarking Go1.3.3 dan Go1.4

Image
Bahasa pemrograman Go1.4 telah rilis. Mari kita lihat performa antara Go1.3.3 dengan Go1.4. Dengan menggunakan tool autobench . Install Go1.4 menggunakan gvm. sudo apt-get install curl git mercurial make binutils bison gcc bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer) source ~/.gvm/scripts/gvm   gvm listall gvm install go1.4 gvm use go1.4 go version Install autobench tool-nya. 1.Buat direktori baru dan masuk lah kedalam direktori tersebut.  2. Install dengan mengunakan keyword git clone -b autobench-next https://github.com/davecheney/autobench.git     3.Masuk kedalam direktori autobench, lalu beri keyword make untuk melakukan benchmarking. Berikut adalah hasil benchmarking yang dilakukan 64-bit linux, Intel Core i5 3337u @1.80Ghz  # go1 benchmark               ...

GO : Range

Bahasa permrograman Go, memiliki range. Kemampuan range adalah range mengiterasi lebih dari elemen dalam berbagai data struktur package main import "fmt" func main() { //Disini kita menggunakan range untuk menjumlahkan angka-angka dalam slice. Array pun bekerja seperti ini juga. nums := []int{2, 3, 4} sum := 0 for _, num := range nums { sum += num } fmt.Println("sum:", sum) //Range didalam arrray dan slice menyediakan index dan nilai untuk setiap masukan. Diatas kita tidak membutuhkan index, jadi kita kosongkan saja. Terkadang kita membutuhkan indeks sekalipun. for i, num := range nums { if num == 3 { fmt.Println("index:", i) } } //Range dalam map mengiterasi lebih key/value pasangan. kvs := map[string]string{"a": "apple", "b": "banana"} for k, v := range kvs { fmt.Printf("%s -> %s\n", k,...

GO : Random Numbers

Bahasa pemrograman Go memiliki package math/rand yang berfungsi untuk mendapatkan nilai random. package main import "fmt" import "math/rand" func main() { //Dengan menggunakan keyword rand.Intn() akan menampilkan hasil random sebuah bilangan integer fmt.Print(rand.Intn(100), ",") fmt.Print(rand.Intn(100)) fmt.Println() //Dengan menggunakan keyword rand.Float64() akan menampilkan hasil random sebuah bilangan float64, berawal dari 0.0 < f < 1.0 fmt.Println(rand.Float64()) fmt.Print((rand.Float64()*5)+5, ",") fmt.Print((rand.Float64() * 5) + 5) fmt.Println() //Keyword rand.NewSource() Untuk membuat generator pseudorandom deterministik, memberikan seed yang mudah dikenal s1 := rand.NewSource(42) r1 := rand.New(s1) fmt.Print(r1.Intn(100), ",") fmt.Print(r1.Intn(100)) fmt.Println() //jika membuat nilai seed yang sama seperti yang diatas maka aka...

Fitur fmt, string, dan math dalam Bahasa Pemrograman Go

Fitur “fmt” Func Println dan Scan Sebuah fitur yang mengimplementasikan format I/O dengan fungsi analog seperti printf atau scanf pada C. Format ini berasal dari C namun lebih simple. Format ini dapat diakses dengan menuliskan import “fmt” . Contoh cara pemakaian : Package main Import "fmt" Func main (){ Var a string Fmt.println("what is your name?") Fmt.scan(&a) //disimpan dalam a Fmt.println("hi", a) } input : bryan output : hi bryan //fmt.Println = untuk mengeluarkan output dari komputer. //fmt.Scan = untuk menerima input dari user. Fitur “strings” import “strings”   Func Repeat Fitur ini berguna untuk mengembalikan/mengulangi sebuah string baru seperti “copy-paste”. strings.Repeat(“[string baru]”, [jumlah pengulangan]) “string baru” akan diulang sebanyak jumlah pengulangan. Contoh cara pemakaian : package main Import ( "fmt" ...

GO : Sorting

Bahasa pemrograman Go memiliki package sort yang mengimplementasikan sorting untuk builtin dan type yang ditentukan user. package main import "fmt" import "sort" func main() { //Metode sort specific kebuiltin type; berikut contoh untuk string, dan integer. Dengan masing masing menggunakan keyword sort.Strings() dan sort.Ints() yang dipanggil dari package sort. strs := []string{"c", "a", "b"} sort.Strings(strs) fmt.Println("Strings:", strs) ints := []int{7, 2, 4} sort.Ints(ints) fmt.Println("Ints: ", ints) //Kita juga bisa menggunakan sort untuk mengecheck jika slice telah dalam keadaan terurut. Dengan keyword sort.AreSorted() memeriksa apakah data telah terurut, jikat terurut maka print true jika tidak maka print false. s := sort.IntsAreSorted(ints) fmt.Println("Sorted: ", s) } Output Strings: [a b c] Ints: [2 4 7] Sorted: true Sour...

GO : Channels

Bahasa pemrograman Go, memiliki channels yang berguna sebagai saluran untuk menghubungkan goroutines secara bersamaan. Anda dapat mengirim nilai-nilai ke dalam saluran dari satu goroutine dan menerima nilai-nilai ke dalam goroutine lain. package main import "fmt" func main() { //Membuatchannel baru dengan menggunakan keyword make(chan val-type). messages := make(chan string) //Mengirim nilai ke dalam channels menggunakan keyword channel <- syntax. Disini kita mengirim “ping” ke pesan channel yang dibuat diatas, dari goroutine baru. go func() { messages <- "ping" }() //Sebuah <- channel syntax menerima nilai dari channel. Disini kita akan menerima pesan “ping” dan print out. msg := <-messages fmt.Println(msg) } Ketika dijalankan, program pesan “ping” berhasil melewati dari satu goroutine ke goroutine yang lainnya via channel yang dibuat tadi. Secara default mengirim dan menerima blok sampai kedua pengirim...

GO : Goroutines

Dalam bahasa pemrograman Go, mendukung adanya goroutine. Sebuah goroutine adalah thread yang ringan dari eksekusi. package main import "fmt" func f(from string) { for i := 0; i < 3; i++ { fmt.Println(from, ":", i) } } func main() { //Anggap saja kita memiliki sebuah fungsi f(s). Hal ini adalah yang memanggil dengan cara biasa, dan menjalankannya serempak. f("direct") //Untuk memanggil fungsi ini dalam goroutine, gunakan go f(s). Goroutine baru ini akan mengeksekusi bersamaan dengan memanggil satu . go f("goroutine") //Bisa juga memulai goroutine untuk fungsi panggilan anonim. go func(msg string) { fmt.Println(msg) }("going") //Dua goroutines ini berjalan secara asynchronously di goroutines terpisah sekarang, jadi eksekusi jatuh sampai di sini. Kode Scanln ini membutuhkan kita menekan tombol sebelum keluar program. var input string fmt.Scanln(...

GO : Error

Dalam bahasa pemrograman Go, kita dapat melihat sebuah kesalahan yang berfungsi kembali, dan untuk mengangani error tersebut, bahasa pemrograman Go menggunakan konstruksi bahasa yang sama digunakan untuk yang lain, non-error tasks. package main import "errors" import "fmt" //Dengan ketentuan, error adalah nilai kembalian terakhir dan memiliki tipe error, sebuah built-in interface. func f1(arg int) (int, error) { if arg == 42 { //Keyword errors.New membangun nilai error yang dasar dengan memberikan pesan error return -1, errors.New("can't work with 42") } //Nilai nil di dalam posisi terdapatnya error, mengindikasikan bahwa disana tidak terjadi error return arg + 3, nil } //Hal ini memungkinkanuntuk menggunakan bermacam tipe sama dengan error, dengan cara  mengimplementasikan metode Error() didalamnya. Disini sebuah variant dalam contoh diatas menggunakan custom type untuk secara ekxplisit untuk merepresen...

GO : Recursion Function

Bahasa pemrograman Go mendukung rekursi dengan memungkinkan fungsi untuk memanggil dirinya sendiri dalam teks program. Fungsi rekursi berguna untuk memecahkan jenis masalah yang sama sebagai bahasa yang penting bahkan tanpa struktur kontrol berulang seperti “while” atau “for”. Contoh paling dasar dalam penggunaan fungsi rekursif. package main import "fmt" func fact(n int) int { if n == 0 { return 1 } return n * fact(n-1) // memanggilfungsi sendiri n-1 hingga n = 0 maka return 1. } func main() { fmt.Println(fact(4)) }   Output 24 //4*3*2*1=24   Source

GO : Pointer

Bahasa pemrograman Go mendukung juga adanya pointer. Deklarasi dalam bahasa pemrograman Go adalah sama dengan bahasa pemrograman C, tetapi ditulis dengan cara yang berbeda, yang diakhiri dengan type. Tidak seperti bahasa pemrograman C, Go memiliki pengumpulan sampah, dan melarang aritmetik pointer. Tipe referensi, seperti C++ itu tidak ada dalam Go. Beberapa jenis built-in, seperti maps dan channel, telah dikemas dan diinisialisasikan menggunakan fungsi make. Pointer memperbolehkan untuk melewati referensi ke nilai-nilai dan catatan dalam sebuah program. Contoh dasar pointer. package main import "fmt" //fungsi zeroval dan zeroptr. zeroval memiliki parameter int, sehingga argumen akan diteruskan kepadanya oleh nilai. zeroval akan mendapatkan salinan iVal yang berbeda dari satu fungsi panggilan. func zeroval(ival int) { ival = 0 } //fungsi zeroptr memiliki parameter *int, maka membutuhkan int pointer. code *iptr di dalam fungsi kemudian dereferences ...

GO : Function

Bahasa pemrograman Go mendukung funtion, sama seperti bahasa pemrograman lainnya. Contoh paling dasar dalam penggunakan function. package main import "fmt" func plus(a int, b int) int { return a + b //fungsi akan mengembalikan a+b } func main() { //memanggil fungsi dengan cara menuliskan keyword fungsi yang sebelumnya telah dideklarasikan res := plus(3, 2) fmt.Println("3+2 =", res) } Output 3+2 = 5 Source

GO : Maps

Bahasa pemrograman Go mendukung built-in associative array yang merupakan kumpulan indeks yang bisa dimasukan berbagai macam tipe data, yaitu dengan menggunakan keyword map. Untuk membuat map yang kosong, menggunakan keyword make dengan “make(map[key-type]val-type)”. Contoh penggunaan Maps. package main import "fmt" func main() { m := make(map[string]int) // untuk memasukan nilai yang berpasangan kedalam map dengan menggunakan keyword name[key]=value m["k1"] = 2 m["k2"] = 3 fmt.Println("map:", m) // variabel v1 akan mendapatkan nilai dengan name[key] v1 := m["k1"] fmt.Println("v1: ", v1) //len akan memberikan panjang pasangan atau nilai-nilai yang ada di dalam map fmt.Println("len:", len(m)) // keyword delete akan menghapus pasangan key/value yang ada dalam map delete(m, "k2") fmt.Println("map:", m) // Opsional kedua dapat mengembalikan nilai dari map jika nilai ters...

GO : Arrays

Pada dasarnya array merupakan sebuah struktur data yang dapat menyimpan satu atau banyak nilai di dalamnya. Bahasa pemrograman Go mendukung untuk membuat sebuah array, memasukan nilai di dalamnya, dan mengambil elemen didalamnya. Array dibagi menjadi beberapa jenis. Fixed array, yaitu array yang ukurannya tidak bisa diubah. Dynamic array, yaitu array yang ukurannya bisa berubah. 1-dimension array, yaitu array yang hanya terdapat satu dimensi (terdapat 1 baris). Multi-dimension array, yaitu array yang bisa n dimensi yang terdapat banyak baris, layer, dll. Bit array, yaitu array yang menyimpan hanya bit (0/1). Array asosiatif, yaitu array yang indeksnya tidak harus integer dan tidak harus urut. Contoh array dalam bahasa pemrograman Go. package main import ( "fmt" ) func main() { // membuat sebuah array yang memiliki 5 nilai integer. var a [5]int fmt.Println("len(a) =", len(a))   // array a diini...