~/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 assignmentConstants
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 printData 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 negatifFloat
go
var price float64 = 19.99 // default float type di Go
var f32 float32 = 3.14
fmt.Printf("%.2f\n", price) // format 2 desimalString
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 // logikaConditions
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 loopFunctions
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)
}