Cinta, passion dan pengorbanan

Tag

Long time ago. Dulu banget. Sebelum saya mengenal apa itu perempuan, saya tertarik dengan bunyi-bunyian, lebih tepatnya musik. Sayangnya, saya bersekolah ditempat yang “segala apa yang berhubungan dengan musik” hukumnya haram. Saya bersekolah disebuah pondok pesantren, 6 tahun yang melelahkan.

Guitar pertama saya disita gara-gara memainkan lagu dengan judul “Tuhan”. Ironis yah :). Saat orang asik(terpaksa) belajar malam, saya asik main gitar. Saya belum ngerti, itulah yang namanya cinta, itulah yang namanya passion. Tapi saya gak nangis kok (lupa sih).

Guru saya adalah seorang ustadz dari pesantren lain yang disana hukum bermain musik haramnya udah mendekati babi. Kalau bukan anaknya yang punya pondok, barang kali beliau sudah di usir. Guru saya ini lulusan Itali loh. Kadang saya kangen bagnet ama beliau nih. Konon, ruang bermusiknya dilapisin peredam, biar suara2 haram itu tidak menyebarkan dosa kemana-mana. Bayangkan, dosa menyebar seperti virus flu, melalui udara.

Ah, seandainya gitar saya gak disita, atau saya nekat terus main gitar, mungkin saya sudah kayak Dewa Bujana wkwkwkwkwkw. Atau miriplah dengan Jubing :)=:). Karena aku kurang gigih, kurang pengorbanannya, menyerah begitu saja, jadilah begini ini, usia menginjak kepala 4, baru mulai belajar lagi :). Yah, mau bagaimana lagi, saya tumbuh dilingkungan yang penuh tekanan. Lama kemudian, saya menyadari, saya menyia-nyiakan waktu yang begitu banyak. Tapi apa daya saya tidak punya pilihan.

Lepas dari pesantren, saya memilih untuk kuliah kalau gak di teknik ya di metalurgi, bukan karena alsan ilmiah tapi karena alasan musik “Metal”–jaman itu musik metal lagi naik-naiknya. Walupun, guru saya bilang, saya pemain biasa-biasa saja, namun beliau menawari saya untuk kuliah dikota itu saja, nanti boleh ngelanjutin belajar gitarnya gak usah bayar, gratis. Sayang sekali saya tolak. Hah, sebuah persimpangan yang saya sesali dikemudian hari. Coba, saya tahu apa itu passion….Akhirnya saya menyia-nyiakan waktu saya lagi dengan kuliah yang gak jelas….

Variable di Go

Tag

Berbeda dari C dan turunannya, variable di Go di deklarasikan dengan menyebut nama variable baru tipe. Tujuannya agar jelas ketika variable menjadi komplek, utamanya ketika nanti berhubungan dengan closure.

Bandingkan:

Go Vs C

Source Code C:

int (*(*fp)(int (*)(int, int), int))(int, int)

Source Code Go:

f func(func(int,int) int, int) func(int, int) int

Reference Library di Go

Tag

Dalam bahasanya orang .net, ketika kita akan menggunakan library yang sudah ada, atau baru kita buat, kita menyebutnya me-reference.

Dalam Go, ini disebut meng-import. Kemudian method2 yang kelihatan disebut :export (dari sisi library). Kalau dalam bahasa .net public method kali ya hahahahahaha….meraba-raba nih.

Uniknya di Go semua method yang diawali dengan huruf besar otomatis diexport, semua method yang diawali dengan huruf kecil otomatis tidak diexport. Hahahahaah….mesti hati-hati nih.

Conoth:

import “fmt”
import “math”

Atau

import (
“fmt”
“math”
)

fmt dan math adalah nama package.

Testing in Go

Tag

Seringkali kita membuat program entry pointnya selalu lewat “main”. Code kita build (atau di Go install) kemudian kita cari executable file-nya dan jalankan. Terkadang untuk sampai titik test tertentu (function tertentu) kita harus mulai dari “main”. Ini saya kira terlalu jauh.

Karena itu saya sering menggunkan test untuk menguji bagian kecill dari sosftware. Sehingga saya tidak perlu menjalankan begitu besar software, hanya untuk sampai pada bagian yang akan ditest.

Di Go ada fasilitas untuk itu, untuk menjalankannya cukup ketik:

>go test

Untuk itu kita harus import package “testing” build in package dari Go.

Syarat yang lain, nama file test harus berakhiran _test.go. Dan nama file harus diawali dengan TestXXX dengan parameter func (t *testing.T)

Berikut ini adalah contoh testing terhadap fungsi Sqrt dalam package newmath sebelumnya:

package newmath

import "testing"

func TestSqrt(t *testing.T){
    const in, out =4,2
    if x:= Sqrt(in); x!= out {
        t.Errorf("Sqrt(%v) = %v, want %v", in, x, out)
    }
}

Untuk pos pos berikutnya saya akan pakai cara ini untuk membuat program.

Package Go

Tag

Setiap program Go diletakkan dalam package. Nama package sama dengan nama folder tempat diletakkan file-file code.

Setiap file selalu diawali dengan nama package:

package “nama pakage”

Khusus untuk program yang bisa dijalankan harus diletakkan dalam package “main”. Ini menjawab pertanyaan saya sebelumnya.

Dengan mengikuti pola ini, kita bisa memakai tool2 yang ada didalam Go dengan effisien.

Membuat library di Go

Tag

Program tidak melulu dalam satu pakage. Sebuah program kadang menggunakan code yang sudah ditulis sebelumnya dalam pakage yang lain atau biasa disebut library. Ada build-in pakage (bawaan). Ada juga yang custom (kita buat sendiri)

Nah, kita akan membuat library custom. Library ini berisi function yang menghitung akar dari sebuah bilangan. Library ini saya letakkan di package “newmath”.

Berikut langkah-langkahnya.

Saya buat folder baru dibawah “fatur”, …/github.com/fatur/newmath.

Buat file dengan nama sqrt.go

Masukkan code berikut ini(nyontek ditutorial):

package newmath
func Sqrt(x float64) float64 {
	z := 1.0
	for i := 0; i < 1000; i++ {
		z -= (z*z - x) / (2 * z)
	}
	return z
}

Code ini kemudian saya simpan. Untuk memastikan code ini benar saya menjalankan build

>go build github.com/fatur/newmath

Build ini tidak menghasilkan file apa-apa, kecuali menyatakan bahwa tidak ada kesalahan dalam code diatas. Agar menghasilkan file yang tersimpan dalam pkg kita harus menjalankan “install”.

Untuk menggunakan code diatas ke dalam package hello, ubah file hello.go seperti dibawah ini:

package main

import (
	"fmt"

	"github.com/user/newmath"
)

func main() {
	fmt.Printf("Hello, world.  Sqrt(2) = %v\n", newmath.Sqrt(2))
}

Kemudian jalankan
>go install github.com/fatur/hello

Cek di folder pkg, untuk melihat pakage newmath.

untuk menjalankan panggil hello.

Go Code Organization And Setting Environment

Tag

Sebelum menuliskan code, menurut tutorial Go, kita harus memahami dulu struktur organisasi code di Go agar tool2 development Go bisa memahami dan development berjalan lancar.

Code harus kita letakkan di workspace. Di dalam workspace terdapat 3 sub directory:

  • src, berisi source code yang kita buat.
  • pkg, berisi paket-paket object yang akan kita reference di source code.
  • bin, berisi binary file yang bisa dijalankan komputer.

Kita coba:

  1. Saya buat workspace yang bernama: latihan
  2. Saya buat subfolder: src
  3. Karena dalam src nantinya akan ada banyak pakage code (project kali ya kalau di .net heheheh…sama2 meraba nih), kita harus menentukan dulu nih pakage path-nya. Menurut tutorial, sebaiknya path disamankan dengan root repository dimana sourcecode nantinya kita simpan. Karena nama pakage yang singkat2 akan dipakai sendiri oleh Go (eGo-is yah..wkwkwkkwkwk). Misal, nanti kita kan taruh di github/fatur, maka kita kan kasih path: latihan/src/github/fatur
  4. Kemudian saya buat pakage directory: hello. Sampai disini saya rindu IDE. wkwkwkwkwkwkw.
  5. Nah baru buar file: hello.go
  6. Tuliskan code. Contek saja dulu dari contoh sebelumnya. PR nih…mengapa pakage-nya “main”. Tanda tanya besar.
  7. Saya run go install. Hasilnya protes dia: go install: no install location for directory D:\projects-test\Go\latihan\src\gi
    thub\fatur\hello outside GOPATH
  8. Ternyata kita harus set dulu GOPATH-nya. Masuk ke system environment windows, tambahkan env baru GOPATH=workspace path.
  9. Jalankan dengan menyebutkan pakage path dan lokasi pakage. Disini: go install github.com/fatur/latihan/hello.
  10. Masuk ke workspace/bin jalankan file hello.exe