OS YG SAYA GUNAKAN
Ubuntu Mate 16.04, 64 bitDevelopment memakai editor Vim
ASAL USUL BAHASA GO
MENGAPA GO ?
Dari sekian banyak bahasa pemograman, mengapa memilih Go ?Beberapa alasan:
- Bahasa Go sederhana. Kalau Anda mengerti bahasa Java, Javascript, C, Objective-C, dll maka mempelajari bahasa Go bukanlah hal sulit.
- Concurrent. Go dari sejak awal sudah memikirkan cara untuk membuat program yang berjalan dengan menggunakan kemampuan multi-core cpu. Dan kita tahu bahwa hampir semua komputer saat ini (bahkan Hand Phone) sudah multi-core.
- Kompilasi yg sangat cepat dan effisien.
- Memory safe
- Garbage collection
- Bagi saya Go berada antara pemograman low level dan high level. Ini akan sangat berpengaruh dalam membuat aplikasi, yang kadang kala kita harus masuk ke low level hardware dengan bahasa lain spt C. Dengan Go, semua nya menggunakan bahasa Go.
- Cocok sekali untuk Cloud Computing. Kalau kita lihat yg menggunakan bahasa Go saat ini contohnya Dropbox, Google, SoundCloud, CloudFlare, Docker and Cloud Foundry; semua bergerak di cloud technology. Dan Cloud adalah masa depan.
- Static type, compiled
INSTALASI
Download file go1.6.2.linux-amd64.tar.gz dari https://golang.org/dl/
Nb. file mungkin berbeda nama, bahasa Go diupgrade setiap 6 bulan sekali, kira-kira setiap bulan Februari dan Agustus
Buka terminal, dan jalankan perintah sbb:
$ tar xvf go1.6.2.linux-amd64.tar.gz
$ cd go
$ vim hello.go //atau gunakan editor lain
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
$ go run hello.gohello, world
Kalau sudah mendapatkan output "hello, world" berarti installasi sudah ok
Tunggu dulu. Bukankah ini bahasa yg di compile lalu menghasilkan program yg bisa dijalankan (executable) ?
Ya, anda benar, go run adalah command bantu yg melakukan kompilasi dan menjalankan program anda. Go Run menggunakan directory sementara untuk kompilasi. Setelah program dijalankan, go run akan membersihkan directory tsb.
Mari kita buat executable program dg melakukan compile
$ go build hello.go //go build adalah perintah untuk
//kompilasi hello.go
$ ls -l hello
-rwxrwxr-x 1 shm shm 2,2M Jun 24 14:03 hello
(sukses compile & menghasilkan program hello yg bisa di jalankan melalui command di terminal)
$ ./hello
hello, world
Mari kita bahas program di atas:
ada : package main
func main()
Ketika kita menjalankan go run, maka go run akan mencari fungsi main, yaitu func main, yang berada dalam package main.
fmt adalah salah satu standar library. Untuk menggunakan library ini, kita harus melakukan import, yaitu import "fmt"
fmt.Println adalah salah satu fungsi dalam standar library fmt
Ketika kita menjalankan program Go, maka pertama kali Go akan mencari func main(). Untuk melihat apakah memang benar go menjalankan func main, maka kita akan ubah sedikit program di atas:
package main
import "fmt"
func index() {
fmt.Printf("hello, world\n")
}
$ go run hello.go
runtime.main: call to external function main.main
runtime.main: main.main: not defined
runtime.main: undefined: main.main
Terbukti, ketika main() diubah menjadi index() maka terjadi error runtime
Untuk mengetahui informasi ttg fmt.Println maka kita bisa melihat deskripsi dari fungsi tsb dg perintah:
$ godoc fmt Println
func Println(a ...interface{}) (n int, err error)
Println formats using the default formats for its operands and writes to standard output. Spaces are always added between operands and a newline is appended. It returns the number of bytes written and any write error encountered.
Go sangat efisien, compiler akan memeriksa apakah program melakukan import atau mendeklarasi variable namun variable tsb tidak digunakan didalam program.
contoh:
Mari kita import library "os", tetapi kita tidak menggunakan library tsb dalam program yg kita buat.
package main
import (
"fmt"
"os"
)
func main() {
fmt.Printf("hello, world\n")
}
$ go run hello.go
# command-line-arguments
./hello.go:5: imported and not used: "os"
Terjadi error karena kita import "os" namun library "os" tsb tidak digunakan.
Informasi tentang package lainnya dapat dilihat pada https://golang.org/pkg/
SETTING ENVIRONMENT
Untuk program yg sederhana dan ukuran nya kecil, kita bisa langsung membuat program spt diatas, di folder mana saja. Namun untuk program besar, maka kita harus membuat beberapa direktori. Go sudah menetapkan standar untuk itu. Supaya Go mengetahui directory tempat kita kerja (workspace) dan directory dimana binary file Go Language, maka kita edit .bashrc
$ cd $HOME$ vim .bashrc
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
Workspace terdiri dari 3 folder: bin, pkg, src. Maka kita harus buat ke 3 directory ini secara manual:
$ mkdir bin pkg src
Semua program/project kita letakkan di dalam directory src, dan masing-masing project harus dibuat directory.
contoh:
kita buat "hello world"
$ cd $GOPATH/src
$ mkdir hello
$ vim hello.go
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
$ go run hello.go // output nya : "hello world"
$ go build
$ ls -l // akan ada file executable bernama "hello"
$ go install
go install akan menghasilkan file executable "hello" didalam directory
$GOPATH/bin
$ cd $GOPATH/bin
$ ls -l // ada ada file executable bernama "hello"
file "hello" ini dapat dijalankan dari directory mana saja. Ingat sewaktu melakukan setup di atas kita menambah path menjadi $GOPATH/bin
$ cd $HOME
hello // menghasilkan output : "hello world"
TIPE
Go disebut dengan bahasa yg static type, artinya variable selalu mempunyai tipe tertentu, dan tipe ini tidak bisa diubah. Kalau kita mempunyai variable x bertipe string, lalu kita masukkan nilai integer kedalam x, maka akan error.Apasaja tipe dari bahasa Go ?
integer
adalah nilai bulat, spt -100, -99, -3,-2,-1,0,1,2,3,4,.....
Go mempunyai bbrp tipe integer yaitu: uint8, uint16, uint32, uint64, int8, int16, int32, int64 (uint adalah unsigned integer, hanya nilai positif, sedangkan int adalah signed integer : positif dan negatif. Sedangkan angka 8, 16, 32, 64 adalah jumlah bit yg digunakan
Jika kita membuat variable dg tipe int saja (tambah embel-embel 8,15,32,64), maka besarnya bit untuk variable tsb tergantung dari mesin yg kita pakai.
Selain uint dan int diatas, ada juga tipe byte dan rune.
Kedua tipe ini hanyalah alias dari uint dan int
byte sama dengan uint8 , rune sama dengan int32
Floating point
adalah nilai pecahan, spt 1.10, 3.14, 0.005. Ada dua tipe Floating Point yaitu float32, float64. Selain itu ada tipe NaN, singkatan Not a Number, seperti nilai bila 0 / 0 (nol dibagi nol)
Complex Number
Go mendukung complex number dg bilangan imaginer. Untuk menggunakan complex number, variable harus bertipe complex128 untuk 64 bit atau complex64 untuk 32bit
String
merupakan kumpulan karakter. Untuk mendefinisikannya digunakan double quotes contoh : "hello". Single quote digunakan untuk satu char, contoh: 'h', namun ini bukan string melainkan bertipe int32 atau rune
contoh:
s := "hello"; fmt.Println(s) //output adalah "hello"
c := 'h' ; fmt.Println(c) // output adalah 104
Boolean
merupakan nilai yg merepresentasikan benar atau salah (true or false). Ada 3 tanda operator dalam boolean, yaitu:
&& adalah tanda AND
|| adalah tanda OR
! adalah tanda NOT
untuk operator AND
true && true hasilnya true
true && false false
false && false false
untuk operator OR
true || true hasilnya true
true || false true
false || false false
untuk operator NOT
! true hasilnya false
! false hasilnya true
VARIABLE
Variable adalah tempat penyimpanan sementara. Bbrp aturan yg harus ditaati saat menulis variable adalah sbb: huruf pertama variable adalah abjad, lalu diikuti oleh abjad lain, angka, atau underscore ( _ )
contoh variable yg benar: nama, nomor_1
contoh variable yg salah: 1_angka, $hello
Ada berbagai cara untuk mendefinisikan variable:
cara 1:
var namaVariable type
var namaVariable type = value
contoh:
var salam string
var salam string = "Selamat pagi Indonesia"
cara 2:
var namaVariable = nilai, disini type tidak perlu ditulis
contoh:
var salam = "Selamat pagi Indonesia"
cara 3:
namaVariable := nilai, disini kata var dan tipe tidak perlu ditulis
salam := "Selamat pagi Indonesia"
Multiple variable/assignment
Beberapa cara mendefinisikan multiple variable:contoh:
var a =1
var b = 2.5
var c = "hello"
dapat disingkat menjadi:
var (
a = 1
b = 2.5
c = "hello"
)
dapat disingkat menjadi:
var a,b,c = 1, 2.5, "hello"
contoh program
$ vim var.go
package main
import "fmt"
func main() {
var a int // tipe ditulis
a = 100
var b = 12.345 // tipe tidak ditulis
var c,d uint64 = 1,2 //multivalue, c bernial 1, d bernilai 2
fmt.Println(a,b,c,d)
}
$ go run var.go
100 12.345 1 2
Kita tidak dapat mendeklarasikan variable dua kali, contoh:
sapa := "halo"
sapa := "helo" //error
tapi kita dapat melakukan begini:
sapa := "halo"
sapa = "helo"
Ada special variable yaitu underscore "_". Apapun yg dimasukkan kedalam variable ini akan dibuang - tidak bisa digunakan.
contoh:
a,b = 1, "hello" // a bernilai 1, sedangkan b bernilai "hello"
_, b = 1, "hello" // nilai 1 tidak digunakan, b bernilai "hello"
contoh program:
Kita akan hitung luas lingkaran, yaitu phi * r * r
package main
import (
"fmt"
)
func main() {
const phi = 22.0 / 7.0
var r, luas float64
fmt.Print("Masukkan jari-jari lingkaran: ")
fmt.Scanf("%f", &r) //Scanf adalah fungsi untuk meminta input dari keyboard
luas = phi * r * r
fmt.Println("Luas lingkaran adalah: ", luas, "\n")
}
Komentar (comment)
Comment bahasa Go sama dengan bahasa C.Ada 2 jenis komentar
1. komentar baris (line comment), di awali dengan tanda double slash (//)
2. komentar multiline, di awali dengan /* dan diakhiri */
contoh:
/* ini adalah multiline comment
program luas segiempat
di program oleh : suheimi
tgl buat : 01/01/2016
*/
func main(){
// ini adalah line comment
// program ini menghitung luas segiempat panjang * lebar
...
}
CONSTANTS
constant adalah variable yg nilainya tidak bisa diubah lagi.contoh:
const PHI = 22.0 / 7.0
const PHI2 = 3.14
const satu, dua, tiga = "one", "two", "three"
STRING
string terdiri dari deretan character utf-8, didalam double quotes.contoh:
sapa1 := "halo"
sapa2 := " apa kabar"
sapa = sapa1 + sapa2 //"halo apa kabar"
sapa = sapa1
+ sapa 2 // ini error
sapa = sapa1 +
sapa2 // ini benar
Variable string tidak dapat diubah (immutable)
contoh:
s := "hello"
s[0] = "H" //error
Untuk mengubah "hello" menjadi "Hello" kita dapat melakukan sbb:
s:= "hello"
s := "H" + s([1:len(s)]) // s bernilai "Hello"
atau kita dapat juga mengubah ke tipe rune terlebih dahulu
s := "hello"
c := []rune (s)
c[0] = 'H'
s = string(c) // kembalikan kebentuk string
contoh program:
$ vim sapa.go
package main
import (
"fmt"
"os"
)
func main() {
nama := os.Args[1]
sapa1 := "halo"
sapa2 := "apa kabar"
sapa := sapa1 + " " + nama + ", " + sapa2
fmt.Println(sapa)
}
$ go run sapa.go Suheimi
halo Suheimi, apa kabar
FUNCTION (fungsi)
Function memungkinkan kita untuk menyelesaikan pekerjaan yg besar menjadi beberapa pekerjaan kecil. Pekerjaan kecil-kecil ini dapat dibuat oleh kita sendiri, oleh tim kita bahkan oleh orang lain. Function merupakan hal penting dalam bahasa GOSyntax:
func name (parameters) (result types) {
}
Perhatikan letak kurung kurawal {}. Go akan error bila Anda menulis sbb:
func name()
{
//error
}
contoh:
func pangkat2 (x int) int {
return x * x
}
fmt.Println(pangkat2(5)) //output: 25
Penjelasan: x adalah parameter bertipe integer
int adalah result type, tipe output yg dihasilkan
contoh:
func luas_segiempat(x, y float64) float64 {
return x * y
}
fmt.Println(luas_segiempat(1.5, 4)) //output: 6
Penjelasan: x adalah lebar, y adalah panjang bertipe float 64 bit
output juga bertipe float64 bit
STRUKTUR
IF statement
if <true> {
statement
} else if <true> {
statement
} else
statement
}
contoh:
if usia <= 5 {
fmt.Println("balita")
} else if usia <= 17 {
fmt.Println("remaja")
} else {
fmt.Println("dewasa")
}
Kita dapat melakukan initialize variable pada if statement.
contoh:
if err:= file.Chmod(777); err != nil {
log.Stderr(err)
return err
}
SWITCH statement
FOR statement
Bahasa Go hanya punya satu statement untuk looping yaitu FOR loop. Tidak ada while, repeat, foreach dsb.Beberapa bentuk For:
1. for init; condition; post {}
contoh, print angka 1 s/d 10
for i:=1; i<=10; i++ { //kurung kurawal harus sejajar dg kata "for"
fmt.Println(i)
}
// for loop berikut akan error krn kurung kurawal letaknya salah
for i:=1; i<=10; i++
{
fmt.Println(i)
}
2. for condition {}
ini spt while loop
contoh:
i := 1
for (i<=10) {
fmt.Println(i)
i++
}
3. for {}
ini endless loop, tidak akan berhenti
contoh:
i:=1
for {
fmt.Println(i)
i++
}
4. for i, c := range(string) {}
ini digunakan untuk looping variable string, list, array, etc
contoh, cetak huruf "hello" satu persatu
s := "hello"
for pos, ch := range(s) {
fmt.Println("Huruf ke : ", pos+1, " adalah ", string(ch))
}
contoh program:
kita akan membalikkan kata "hello" menjadi "olleh"
package main
import "fmt"
func main() {
s := "hello"
a := []rune(s) // string immutable, dijadikan array of int32 dulu
for i,j := 0, len(a)-1; i<j; i,j = i+1, j-1 {
a[i], a[j] = a[j], a[i]
}
fmt.Println(string(a))
}
ARRAYS