Thursday, December 11, 2014

Pelajaran 4 dalam bahasa Pemrograman Go

Hai Guys... bagaimana dengan kabar kalian? Baik-baik aja kan. O ya bagaimana dengan materi yang sebelumnya, sudah paham?

Hari ini, saya ingin share tentang stack and queue

Ini merupakan gambaran dari Stack and Queue



Stack

Stack (tumpukan) merupakan struktur data LIFO (last in, first out). Stack umumnya di implementasikan dengan array atau linked list. Stack umumnya memiliki beberapa method penting, diantaranya:

● peek/top, untuk melihat data paling atas
● push, untuk menaruh item ke atas tumpukan
● pop, untuk mengambil item teratas dari tumpukan
● print n, untuk mencetak jumlah data pada tumpukan dan n data teratas

● count/is_empty, untuk memeriksa jumlah data di dalam stack

Di bawah ini merupakan contoh dari source codenya:

Go slices make excellent stacks without defining any extra types, functions, or methods. For example, to keep a stack of integers, simply declare one as,

var intStack []int

Use the built in append function to push numbers on the stack:

intStack = append(intStack, 7)

Use a slice expression with the built in len function to pop from the stack:

popped, intStack = intStack[len(intStack)-1], intStack[:len(intStack)-1]

The test for an empty stack:

len(intStack) == 0

And to peek at the top of the stack:

intStack[len(intStack)-1]

It is idiomatic Go to use primitive language features where they are sufficient, and define helper functions or types and methods only as they make sense for a particular situation. Below is an example using a type with methods and idiomatic "ok" return values to avoid panics. It is only an example of something that might make sense in some situation.

package main
 
import "fmt"
 
type stack []interface{}
 
func (k *stack) push(s interface{}) {
    *k = append(*k, s)
}
 
func (k *stack) pop() (s interface{}, ok bool) {
    if k.empty() {
        return
    }
    last := len(*k) - 1
    s = (*k)[last]
    *k = (*k)[:last]
    return s, true
}
 
func (k *stack) peek() (s interface{}, ok bool) {
    if k.empty() {
        return
    }
    last := len(*k) - 1
    s = (*k)[last]
    return s, true
}
 
func (k *stack) empty() bool {
    return len(*k) == 0
}
 
func main() {
    var s stack
    fmt.Println("new stack:", s)
    fmt.Println("empty?", s.empty())
    s.push(3)
    fmt.Println("push 3. stack:", s)
    fmt.Println("empty?", s.empty())
    s.push("four")
    fmt.Println(`push "four" stack:`, s)
    if top, ok := s.peek(); ok {
        fmt.Println("top value:", top)
    } else {
        fmt.Println("nothing on stack")
    }
    if popped, ok := s.pop(); ok {
        fmt.Println(popped, "popped.  stack:", s)
    } else {
        fmt.Println("nothing to pop")
    }
}

new stack: []
empty? true
push 3. stack: [3]
empty? false
push "four" stack: [3 four]
top value: four
four popped.  stack: [3]

Queue

Queue (antrian) merupakan struktur data FIFO (first in, first out). Queue umumnya diimplementasikan dengan circular buffer atau linked list.
Queue umumnya memiliki beberapa method penting, diantaranya:

● peek/front/first, untuk melihat data paling depan
● back/last, untuk melihat data paling belakang ● enqueue, untuk mengantri
● dequeue, untuk mengeluarkan item terdepan dari antrian
● print n, untuk mencetak jumlah data pada tumpukan dan n data terdepan
● count/is_empty, untuk memeriksa jumlah data di dalam queue

Terdapat beberapa jenis queue, yaitu:

● Priority queue merupakan antrian dengan prioritas tertentu(akan dipelajari di bagian berikutnya)
● Deque (Double­ended queue) merupakan antrian 2 arah, data bisa masuk dan keluar dari depan maupun belakang.



Ini merupakan contoh source codenya:

package queue
 
// int queue
// the zero object is a valid queue ready to be used.
// items are pushed at tail, popped at head.
// tail = -1 means queue is full
type Queue struct {
    b []string
    head, tail int
}
 
func (q *Queue) Push(x string) {
    switch {
    // buffer full. reallocate.
    case q.tail < 0:
        next := len(q.b)
        bigger := make([]string, 2*next)
        copy(bigger[copy(bigger, q.b[q.head:]):], q.b[:q.head])
        bigger[next] = x
        q.b, q.head, q.tail = bigger, 0, next+1
    // zero object. make initial allocation.
    case len(q.b) == 0:
        q.b, q.head, q.tail = make([]string, 4), 0 ,1
        q.b[0] = x
    // normal case
    default:
        q.b[q.tail] = x
        q.tail++
        if q.tail == len(q.b) {
            q.tail = 0
        }
        if q.tail == q.head {
            q.tail = -1
        }
    }
}
 
func (q *Queue) Pop() (string, bool) {
    if q.head == q.tail {
        return "", false
    }
    r := q.b[q.head]
    if q.tail == -1 {
        q.tail = q.head
    }
    q.head++
    if q.head == len(q.b) {
        q.head = 0
    }
    return r, true
}
 
func (q *Queue) Empty() bool {
    return q.head == q.tail
}
 

Sumber:
http://rosettacode.org/wiki/Stack#Go
http://www.cmpe.boun.edu.tr/~akin/cmpe223/fig2_1.gif
http://www.cs.cmu.edu/~mrmiller/15-121/Homework/hw8/queueOps.png
http://rosettacode.org/wiki/Queue/Definition#Go
Materi dosen

Pelajaran 3 dalam bahasa Pemrograman Go

Hai Guys... gimana nih kabar kalian? Baik-baik saja kan.
Kali ini saya mau sharing tentang Linked List

Apa itu Linked List?
Linked list merupakan struktur data yang terdiri dari node record/value dan reference (link atau pointer), yang bersambung satu sama lain membentuk urutan/rangkaian.

Ternyata Linked List banyak macamnya lho...

● Singly linked list, yaitu linked list yang hanya memiliki 1 link yang menunjuk ke node berikutnya
(next). Elemen pertama dari linked list disebut head, sedangkan elemen terakhir dari linked list disebut tail.


Nah, kalau kita lihat dari gambar di atas ternyata dia hanya bisa 1 arah saja.


Nah, kalau gambar di atas yaitu cara menambahkan node yang baru dari rangkaian linked list yang sudah ada.


Nah kalau yang ini delete node yang ada.

Nah, setelah kita mengetahui konsep cara menambah dan membuang suatu node, maka saya akan menunjukkan codenya.

package main
 
import "fmt"
 
type Ele struct {
    Data interface{}
    Next *Ele
}
 
func (e *Ele) insert(data interface{}) {
    if e == nil {
        panic("attept to modify nil")
    }
    e.Next = &Ele{data, e.Next}
}
 
func (e *Ele) printList() {
    if e == nil {
        fmt.Println(nil)
        return
    }
    fmt.Printf("(%v", e.Data)
    for {
        e = e.Next
        if e == nil {
            fmt.Println(")")
            return
        }
        fmt.Print(" ", e.Data)
    }
}
 
func main() {
    h := &Ele{"A", &Ele{"B", nil}}
    h.printList()
    h.insert("C")
    h.printList()
}

(A B)
(A C B)

● Doubly linked list, yaitu linked list yang memiliki 2 link yang menunjuk ke node sebelum dan sesudahnya (prev dan next)


Untuk cara membuang dan menambah, konsepnya hampir sama dengan yang singly linked list.
Berikut contoh codenya.

package main
 
import "fmt"
 
type dlNode struct {
    string
    next, prev *dlNode
}
 
type dlList struct {
    head, tail *dlNode
}
 
func (list *dlList) String() string {
    if list.head == nil {
        return fmt.Sprint(list.head)
    }
    r := "[" + list.head.string
    for p := list.head.next; p != nil; p = p.next {
        r += " " + p.string
    }
    return r + "]"
}
 
func (list *dlList) insertTail(node *dlNode) {
    if list.tail == nil {
        list.head = node
    } else {
        list.tail.next = node
    }
    node.next = nil
    node.prev = list.tail
    list.tail = node
}
 
func (list *dlList) insertAfter(existing, insert *dlNode) {
    insert.prev = existing
    insert.next = existing.next
    existing.next.prev = insert
    existing.next = insert
    if existing == list.tail {
        list.tail = insert
    }
}
 
func main() {
    dll := &dlList{}
    fmt.Println(dll)
    a := &dlNode{string: "A"}
    dll.insertTail(a)
    dll.insertTail(&dlNode{string: "B"})
    fmt.Println(dll)
    dll.insertAfter(a, &dlNode{string: "C"})
    fmt.Println(dll)
 
    // traverse from end to beginning
    fmt.Print("From tail:")
    for p := dll.tail; p != nil; p = p.prev {
        fmt.Print(" ", p.string)
    }
    fmt.Println("")
}

<nil>
[A B]
[A C B]
From tail: B C A

● Circular linked list, yaitu linked list yang ekornya (tail) menunjuk ke elemen pertama (head).
Untuk jenis yang tidak circular disebut dengan linear linked list. Circular linked list dapat berupa
doubly linked list, yaitu ketika head juga menunjuk ke tail.

Self-organizing List

Self­organizing list adalah linked list yang memindahkan data yang sering diakses ke bagian awal dari list. List ini memiliki berbagai metode:

● MTF atau move­to­front, yaitu memindahkan node yang baru saja diakses sebagai head



● Count method, yaitu dengan mengurutkan node sesuai berapa banyak node tersebut diakses, dan diurutkannya dari yang paling besar ke yang paling kecil.



● Transpose method, yaitu dengan menukar dengan node di depannya tiapkali node tersebut
diakses



Mungkin itu saja yang bisa saya share kan pada kali ini.

Sumber:
http://commoninterview.com/images/Single_Linked_List.jpg,
http://upload.wikimedia.org/wikipedia/commons/thumb/4/4b/CPT-LinkedLists-addingnode.svg/474px-CPT-LinkedLists-addingnode.svg.png,
http://www.nczonline.net/blog/wp-content/uploads/2009/04/Singly_linked_list_delete_after.png
http://rosettacode.org/wiki/Singly-linked_list/Element_insertion#Go
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWW_zZmx_cXfa-Fq-QkXW8pvLSXuxOusz8aP-x1KuiK48FVOTjC8YurCfue3L3bD0661C1DHNCebdN_VZAxgzfTulFHYE0YQAwdt8LtolMMQ1daFQua20O0GNHxqbvB7U8yb8GQMgMzSO1/s1600/doublylist.gif
http://rosettacode.org/wiki/Doubly-linked_list/Traversal#Go
http://www.geeksforgeeks.org/wp-content/uploads/cll1.gif
http://upload.wikimedia.org/wikipedia/commons/0/08/MTF_Algorithm.png
http://upload.wikimedia.org/wikipedia/commons/thumb/a/aa/CountAlgorithm.png/330px-CountAlgorithm.png
http://en.wikipedia.org/wiki/Self-organizing_list#mediaviewer/File:Transpose_Algorithm.png
Materi Dosen

Pelajaran 2 dalam bahasa Pemrograman Go

Hai Guys... ketemu lagi dengan saya... Gimana nih kabarnya baik-baik saja kan.
Ok, kali ini saya ingin share episode 2 dari belajar bahasa pemrograman Go.

Kali ini saya ingin berbagi tentang Array.
Apa sih array itu?
Array merupakan struktur data yang memperbolehkan menyimpan satu atau lebih nilai secara berurutan. Array memiliki 2 bagian penting, yaitu indeks (yang umumnya dimulai dari 0) dan value (yaitu nilai yang disimpan pada indeks tertentu).

Array dibagi menjadi beberapa jenis,diantaranya:

● fixed array, yaitu array yang tidak bisa diubah ukurannya
● dynamic array, yaitu array yang dapat berubah ukurannya
● 1­dimension array, yaitu array 1­dimensi (hanya terdapat 1 row)
● multi­dimension array, yaitu array n-­dimensi (terdapat banyak row, layer, dst)
● bit­-array (atau bitset, bitstring, bitvector), yaitu array yang hanya menyimpan bit (0/1)
● parallel-­array, yaitu 2 atau lebih array yang merepresentasikan array of records
● variable­-length array (VLA), yaitu array yang ukurannya ditentukan pada saat runtime, pada
bahasa C, didukung sejak standar C99,
● sparse array, yaitu array yang memiliki nilai mayoritas sama (biasanya 0), sehingga hanya
perlu menyimpan 3 nilai, yaitu nilai default, posisi dan value yang berbeda
● jagged array (iliffe vector), yaitu array multidimensi dimana panjang row/layer­nya boleh
berbeda­-beda
● associative array (map, symbol table, dictionary), yaitu array yang indeks­nya tidak harus
integer dan tidak harus urut

Array Slicing

Array slicing merupakan operasi yang dilakukan untuk mengambil sejumlah elemen dari suatu array

sebagai array lain. Berikut ini contoh penggunaan slice pada bahasa Go:

     n:=[]int{1,3,5,7,8,13,20}
     a:=n[:3] //[]int{1,3,5}
     b:=n[2:5]//[]int{5,7,8}
     c:=n[4:] //[]int{8,13,20}
     d:=n[:] //[]int{1,3,5,7,8,13,20}
    fmt.Println("n=",n)
    fmt.Println("a=",a)
    fmt.Println("b=",b)
    fmt.Println("c=",c)
    fmt.Println("d=",d)
    a[0],b[0],c[0]=11,22,33
   fmt.Println("n=",n)
   fmt.Println("a=",a)
   fmt.Println("b=",b)
   fmt.Println("c=",c)
   fmt.Println("d=",d)

Pada contoh di atas, tiap perubahan elemen pada slice, akan mempengaruhi array asli (sumber slice).
Untuk membuat array, dapat mempergunakan beberapa syntax, misal:

    n1:=[...]int{1,2,3}
    n2:=[3]int{1,2,3}
   var n3[3]int=[...]int{1,2,3}
   var n4[3]int=[3]int{1,2,3}

Berbeda dengan array pada C dan bahasa lainnya, array pada Go bukanlah reference type, yang
artinya tanda sama dengan akan melakukan copy semua elemen di dalam array. Terdapat beberapa
cara untuk membuat slice, misal:

    s1:=[]int{1,2,3}
    s2:=make([]int,3,3)//length,max-capacity
    s3:=make([]int,3)

Untuk mengetahui ukuran suatu variabel pada Go, dapat digunakan package unsafe, yaitu dengan
perintah unsafe.Sizeof(variable). Bentuk representasi internal suatu slice adalah:



Member ptr merupakan pointer menuju fixed array sesungguhnya, member len merupakan panjang
sekarang yang visible, sedangkan member capmerupakan kapasitas maksimum dari array yang
ditunjuk oleh slice. Sebagai contoh, apabila kita menulis s := make([]byte,5), maka terbentuklah
data berikut ini pada memori:



apabila ditulis s=s[2:4], maka slice yang baru akan menjadi seperti gambar berikut:




Di bawah merupakan contoh program yang sudah komplit:

package main
 
import (
    "fmt"
)
 
func main() {
    // creates an array of five ints.
    // specified length must be a compile-time constant expression.
    // this allows compiler to do efficient bounds checking.
    var a [5]int
 
    // since length is compile-time constant, len() is a compile time constant
    // and does not have the overhead of a function call.
    fmt.Println("len(a) =", len(a))
 
    // elements are always initialized to 0
    fmt.Println("a =", a)
 
    // assign a value to an element.  indexing is 0 based.
    a[0] = 3
    fmt.Println("a =", a)
 
    // retrieve element value with same syntax
    fmt.Println("a[0] =", a[0])
 
    // a slice references an underlying array
    s := a[:4] // this does not allocate new array space.
    fmt.Println("s =", s)
 
    // slices have runtime established length and capacity, but len() and
    // cap() are built in to the compiler and have overhead more like
    // variable access than function call.
    fmt.Println("len(s) =", len(s), " cap(s) =", cap(s))
 
    // slices can be resliced, as long as there is space
    // in the underlying array.
    s = s[:5]
    fmt.Println("s =", s)
 
    // s still based on a
    a[0] = 22
    fmt.Println("a =", a)
    fmt.Println("s =", s)
 
    // append will automatically allocate a larger underlying array as needed.
    s = append(s, 4, 5, 6)
    fmt.Println("s =", s)
    fmt.Println("len(s) =", len(s), " cap(s) =", cap(s))
 
    // s no longer based on a
    a[4] = -1
    fmt.Println("a =", a)
    fmt.Println("s =", s)
 
    // make creates a slice and allocates a new underlying array
    s = make([]int, 8)
    fmt.Println("s =", s)
    fmt.Println("len(s) =", len(s), " cap(s) =", cap(s))
 
    // the cap()=10 array is no longer referenced
    // and would be garbage collected eventually.
}

len(a) = 5
a = [0 0 0 0 0]
a = [3 0 0 0 0]
a[0] = 3
s = [3 0 0 0]
len(s) = 4  cap(s) = 5
s = [3 0 0 0 0]
a = [22 0 0 0 0]
s = [22 0 0 0 0]
s = [22 0 0 0 0 4 5 6]
len(s) = 8  cap(s) = 10
a = [22 0 0 0 -1]
s = [22 0 0 0 0 4 5 6]
s = [0 0 0 0 0 0 0 0]
len(s) = 8  cap(s) = 8

String

String umumnya juga mengimplementasikan array di dalamnya, terdapat berbagai fungs string, yang terdapat pada paket strings, contoh:
● func Contains(s,substrstring)bool
untuk memeriksa apakah substr ada di dalam s
● func ContainsAny(s,charsstring)bool
untuk memeriksa apakah karakter­karakter chars ada di dalam s
● func ContainsRune(sstring,rrune)bool
untuk memeriksa apakah karakter r ada di dalam s
● func Count(s,sepstring)int
untuk memeriksa jumlah substring sep di dalam s
● func Fields(sstring)[]string
funcFieldsFunc(sstring,ffunc(rune)bool)[]string
untuk memecah string s menjadi array of string berdasarkan whitespace atau fungsi f
● func HasPrefix(s,prefixstring)bool
funcHasSuffix(s,suffixstring)bool
untuk memeriksa apakah s memiliki awalan prefix / akhiran suffix
● func Index(s,sepstring)int
funcLastIndex(s,sepstring)int
untuk mengembalikan indeks dari awal substring sep di dalam s
● func IndexAny(s,charsstring)int
funcLastIndexAny(s,charsstring)int
untuk mengembalikan indeks pertama/terakhir dari salah satu karakter chars di dalams
● func IndexByte(sstring,cbyte)int
untuk mengembalikan indeks dari byte c di dalam s
● func IndexFunc(sstring,ffunc(rune)bool)int
funcLastIndexFunc(sstring,ffunc(rune)bool)int
untuk mengembalikan indeks dari karakter pertama/terakhir yang mengembalikan true  dari fungsi f
● func IndexRune(sstring,rrune)int
untuk mengembalikan indeks dari karakter r
● func Join(a[]string,sepstring)string
untuk menggabungkan array of string menjadi string
● func Map(mappingfunc(rune)rune,sstring)string
untuk mengganti tiap karakter sesuai fungsi mapping, apabila nilai kembalian fungsi negatif,
maka karakter tersebut akan dihapus
● func Repeat(sstring,countint)string
untuk mengulangi string tertentu sejumlah count kali
● func Replace(s,old,newstring,nint)string
untuk mengganti tiap substring old menjadi new sejumlah n kali, apabila n berisi 0, maka tidak ada batas maksimal penggantian
● func Split(s,sepstring)[]string
func SplitAfter(s,sepstring)[]string
func SplitAfterN(s,sepstring,nint)[]string
func SplitN(s,sepstring,nint)[]string
untuk memecah string berdasarkan substring sep
● func ToLower(sstring)string
func ToTitle(sstring)string
func ToUpper(sstring)string
untuk mengubah case dari karakter­karakter di dalam string● funcTrim(sstring,cutsetstring)string
func TrimFunc(sstring,ffunc(rune)bool)string
func TrimLeft(sstring,cutsetstring)string
func TrimLeftFunc(sstring,ffunc(rune)bool)string
func TrimPrefix(s,prefixstring)string
func TrimRight(sstring,cutsetstring)string
func TrimRightFunc(sstring,ffunc(rune)bool)string
func TrimSpace(sstring)string
func TrimSuffix(s,suffixstring)string
untuk menghapus karakter­karakter tertentu dari awal/akhir/keseluruhan string

Associative String

Contoh di bawah merupakan associative array biasa

// declare a nil map variable, for maps from string to int
var x map[string]int
 
// make an empty map
x = make(map[string]int)
 
// make an empty map with an initial capacity
x = make(map[string]int, 42)
 
// set a value
x["foo"] = 3
 
// getting values
y1 := x["bar"]     // zero value returned if no map entry exists for the key
y2, ok := x["bar"] // ok is a boolean, true if key exists in the map
 
// removing keys
delete(x, "foo")
 
// make a map with a literal
x = map[string]int{
 "foo": 2, "bar": 42, "baz": -1,
}

Contoh di bawah merupakan associative array yang iteration.

myMap := map[string]int {
    "hello": 13,
    "world": 31,
    "!"    : 71 }
 
// iterating over key-value pairs:
for key, value := range myMap {
    fmt.Printf("key = %s, value = %d\n", key, value)
}
 
// iterating over keys:
for key := range myMap {
    fmt.Printf("key = %s\n", key)
}
 
// iterating over values:
for _, value := range myMap {
    fmt.Printf("value = %d\n", value)
}
Okaya, mungkin sekian dulu sharing dari saya, kita bakal ketemu lagi di sharing berikutnya.

Sumber:
http://rosettacode.org/wiki/Arrays#Go,
http://blog.golang.org/go-slices-usage-and-internals_slice-struct.png,
http://blog.golang.org/go-slices-usage-and-internals_slice-2.png,
http://blog.golang.org/go-slices-usage-and-internals_slice-1.png,
materi dari dosen,
http://rosettacode.org/wiki/Associative_array/Creation#Go,
http://rosettacode.org/wiki/Associative_array/Iteration#Go.

Pelajaran 1 dalam bahasa Pemrograman Go.

Hai Guys... Gimana kabar kalian... Sehat" aja kan.
Ok, kali ini saya mau berbagi pengalaman saya bagaimana saya memperlajari bahasa pemrograman go.

Pertama kali yang harus Anda ketahui adalah tentang command line yang perlu Anda gunakan:
untuk bisa mengetahui command line yang terdapat pada go, maka pada command prompt/terminal ketikkan "go help". Di situ Anda bisa melihat command line tentang go.

Yang kedua adalah mengenal struktur coding pada go(ini ditujukan bagi pemula).

package main
import "fmt" -> import ini ditujukan untuk mengimport library yang sudah terinstall pada kompiler                              Go. Saya berani bilang begitu karena tidak semua library pada kompiler go terinstall                            semua, jadinya harus ada beberapa yang harus Anda install sendiri.

func main(){
// your code goes here
}

Go variable

Deklarasi variabel pada Go berbeda dengan bahasa-­bahasa pemrograman lain, hal ini didesain dengan
mengutamakan kemudahan untuk dibaca. Untuk mendeklarasikan variabel digunakan keyword var,
nama variabel (boleh lebih dari satu, dipisahkan tanda koma), dan diakhiri dengan tipe data, boleh
diikuti oleh tanda sama dengan dan nilai awal, contoh:

     var x int
     x = 1
     var y,z string = "test", "123"
     var a,b = "test", 234

Terdapat syntax alternatif (create and assign) untuk membuat variabel, yaitu dengan menuliskan nama variabel (boleh lebih dari 1, dipisahkan dengan tanda koma), diikuti tanda titik dua sama dengan, setelah itu diikuti dengan nilai (atau fungsi yang mengembalikan nilai), contoh:

     x := 1
     y, z = "test", "123"

Pada baris pertama, artinya adalah: variabel x adalah variabel integer dengan nilai awal 1.
Sedangkan pada baris kedua artinya adalah: variabel y dan z adalah variabel string dengan nilai awal "test" dan "123".
Khusus untuk tipe data slice, array asosiatif, dan channel, pembuatan variabelnya harus menggunakan
syntax create­-assign dan harus dibuat dengan keyword make atau diberi nilai inisialisasi dengan kurung kurawal contoh:

       x := make([]int,3)
       y := make(map[int]string)

kedua baris di atas dapat dituliskan dengan:

      x := []int{0,0,0}
      y := map[int]string{}

Untuk membuat atau mengisi tipe data pointer, kita dapat menggunakan keyword new atau syntax
create­-assign diikuti ampersand, contoh:

      var x int
      var y *int = &x

baris kedua dapat diganti dengan:

      y := &x

atau apabila ingin menunjuk ke lokasi lain selain x, bisa ditulis dengan:


     y := new(int)

Go Input/Output

Ini merupakan salah satu contoh dalam hal output.

func main() {
 fmt.Println("halo dunia")
 fmt.Printf("halo juga %.4f\n", 1.23)

}

ini merupakan contoh lain;

package main
import (
 "bufio"
 "fmt"      <- Kalau library yang dimasukkan lebih dari satu, maka format harus seperti yang di                                 samping
 "os"
)
func main(){
 var i int
 var f float64
 var s string
 r := bufio.NewReader(os.Stdin)
 _, err := fmt.Scan(&i,&f,&s)  if err == nil { -> tanda ( _ ) merupakan bahwa var yang sudah saya                                                                                   deklarasi tetapi saya tidak pakai, maka akan dilakukan                                                                             proses selanjutnya(di cuekkan), mungkin beberapa                                                                                   dari kalian bingung, mengapa kog harus pakai tanda (                                                                             _ ). Kalau Anda tidak memakai tanda ( _ ), maka                                                                                    ketika Anda compile, maka akan terjadi error, karena                                                                              ada variable yang sudah dideklarasikan, tetapi tidak                                                                                digunakan.
 fmt.Println("read int, float and string:",i,f,s)
 } else {
 fmt.Println("Error:",err)
 }
 s, err = r.ReadString('\n')
 if err == nil { fmt.Println(s) } else { fmt.Println("Error:",err) }
}

Sumber: Dari materi Dosen yang diberi.

Okay, mungkin itu sharing pertama dari saya, sampai jumpa lagi di sharing berikutnya.

Thursday, August 28, 2014

Windows GO


Hai Guys, pada kesempatan kali ini saya ingin memperkenalkan kepada kalian tentang GO beserta cara untuk menginstall compiler dari GO tersebut.


Pengenalan tentang GO:

Go merupakan bahasa pemrograman yang dibuat oleh Google. Untuk penjelasan selanjutnya silahkan buka di http://hayakukeren.blogspot.com/2012/03/google-telah-merilis-bahasa-pemrograman.html .

I. Cara Instalasi Go Compiler:

1. Pergi ke alamat http://golang.org/dl/ dan download sesuai versi yang ada di komputer Anda.
2. Setelah selesai mendownload, lakukan proses intalasi dengan mengikuti petunjuk yang ada

3. Cek pada start menu sampai muncul folder seperti folder yang di beri tanda pada gambar 1, lalu klik dan jalankan kompilernya(lihat gambar 2). Agar program bisa berjalan dengan lancar, maka komputer harus di restart dahulu.

gambar 1gambar2gambar 2

4. Setelah komputer di restart, kita akan mengkonvigurasi di enviromentalnya. Buka control panel, pilih system dan security, pilih system, pilih advance system setting, pilih environment variables. Pada GOPATH kalian setting di tempat di mana kalian menaruh script codenya.


5. Coba program apakah compiler berjalan. Untuk sementara saya menggunakan notepad++ untuk mengetes apakah compiler berjalan dengan baik.
6. Buka command prompt untuk mencoba program yang telah ditulis di notepad++
II. Instalasi IDE Development

     Ada berbagai macam IDE Development yang dapat kalian gunakan. Untuk itu saya memilih untuk menggunakan QT-Creator.

1. Download file di http://qt-project.org/downloads

2. Test programnya dengan membuat project yang sederhana
3. Build dan run di command prompt
4. Instalasi selesai