Logo

~/saidqb cat ecosystem/programming-language/go.md

Go

Go

Compiled, statically typed language

commit by saidqb

Introduction

Go (Golang): bahasa compiled, statically typed, dibuat Google — dirancang buat simple, compile cepat, dan concurrency built-in lewat goroutine & channel.

Get Started

bash
go version
  • Go 1.23.x (rilis 2x setahun, Feb & Agustus) — cek go.dev/dl

Syntax

go
package main

import "fmt"

func main() {
    fmt.Println("Halo, SaidQB!")
}
  • Setiap file punya package; package main + func main() = entry point program yang bisa dijalankan (bukan library).

Comments

go
// komentar satu baris
/* komentar
   banyak baris */

Variables

go
var name string = "SaidQB"
age := 8                             // type inference, hanya valid di dalam fungsi
var active bool                       // belum diisi -> zero value: false
name, city := "SaidQB", "Klaten"      // multiple assignment

Constants

go
const Pi = 3.14

const (
    StatusActive   = "active"
    StatusInactive = "inactive"
)

Output

go
fmt.Println("halo")                              // print + newline
fmt.Print("tanpa newline")
fmt.Printf("Halo, %s! Umur %d\n", "SaidQB", 8)    // format verb
s := fmt.Sprintf("%s - %d", "SaidQB", 8)           // Sprintf -> return string, tidak print

Data Types

Go punya basic data types (boolean, numeric, string) dan composite types (array, slice, map, struct — masing-masing dibahas di section-nya sendiri di bawah).

Basic Data Types

go
var b bool = true
var i int = 8
var f float64 = 19.99
var s string = "SaidQB"

Boolean

go
var active bool = true
result := 5 > 3          // hasil comparison langsung bool
if active {
    fmt.Println("aktif")
}

Integer

go
var age int = 8              // ukuran tergantung platform, 32-bit atau 64-bit
var small int8 = 127          // int8, int16, int32, int64
var big uint64 = 18446744073709551615   // uint8..uint64: tanpa nilai negatif

Float

go
var price float64 = 19.99    // default float type di Go
var f32 float32 = 3.14
fmt.Printf("%.2f\n", price)  // format 2 desimal

String

go
name := "SaidQB"
full := name + " " + "Klaten"     // concat pakai +
len(name)
strings.ToUpper(name)
strings.Split("a,b,c", ",")

Arrays

go
var arr [3]int = [3]int{1, 2, 3}   // ukuran fix, bagian dari tipe-nya sendiri
arr[0] = 10
len(arr)

Slices

go
nums := []int{1, 2, 3}       // dinamis, dibangun di atas array
nums = append(nums, 4)
sub := nums[1:3]              // slicing: index 1 s/d sebelum 3
len(nums); cap(nums)

Operators

go
5 + 3; 5 - 3; 5 * 3; 5 / 3; 5 % 3       // aritmatika
5 == 5; 5 != 3; 5 > 3; 5 <= 3            // perbandingan
true && false; true || false; !true      // logika

Conditions

go
if age >= 18 {
    fmt.Println("dewasa")
} else if age >= 13 {
    fmt.Println("remaja")
} else {
    fmt.Println("anak-anak")
}

Switch

go
switch status {
case "active":
    fmt.Println("aktif")
case "inactive", "banned":     // beberapa value dalam satu case
    fmt.Println("nonaktif")
default:
    fmt.Println("unknown")
}

Loops

go
for i := 0; i < 5; i++ { ... }        // loop klasik -- satu-satunya keyword loop di Go
for _, tag := range tags { ... }       // range loop, buat array/slice/map
for { break }                            // infinite loop

Functions

go
func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("division by zero")
    }
    return a / b, nil
}

func sum(nums ...int) int {          // variadic function
    total := 0
    for _, n := range nums {
        total += n
    }
    return total
}

Struct

go
type User struct {
    Name  string
    Email string
}

func (u User) Greet() string { return "Halo, " + u.Name }       // value receiver
func (u *User) SetName(n string) { u.Name = n }                  // pointer receiver

user := User{Name: "SaidQB", Email: "said@example.com"}

Maps

go
config := map[string]bool{"debug": true}
config["verbose"] = true
delete(config, "debug")

if val, ok := config["verbose"]; ok {   // ok -> false kalau key tidak ada
    fmt.Println(val)
}