package main

import (
	"bytes"
	"fmt"
)

func main() {
	// Data mentah hasil pembacaan: potongan byte, bukan string.
	data := []byte("Halo, Budi Santoso!")

	// Fungsi bytes mencerminkan strings untuk []byte.
	fmt.Println("Contains :", bytes.Contains(data, []byte("Budi")))
	fmt.Println("HasPrefix:", bytes.HasPrefix(data, []byte("Halo")))
	fmt.Println("Index    :", bytes.Index(data, []byte("Santoso")))
	fmt.Println("Equal    :", bytes.Equal([]byte("go"), []byte("Go")))
	fmt.Println("Equal    :", bytes.Equal([]byte("go"), []byte("go")))

	// ToLower menghasilkan salinan []byte yang baru.
	fmt.Println("ToLower  :", string(bytes.ToLower(data)))

	// Split dan Join bekerja pada []byte.
	nama := bytes.Split(data[6:], []byte(" "))
	fmt.Println("Split    :", nama)
	for _, n := range nama {
		fmt.Println("orang    :", string(n))
	}
	fmt.Println("Join     :", string(bytes.Join(nama, []byte(", "))))

	// Trim membuang karakter tepi pada data mentah.
	kotor := []byte("  \nbelajar go\t")
	fmt.Printf("Trim     : [%s]\n", bytes.TrimSpace(kotor))

	// Lookup map dengan kunci []byte: konversi dioptimalkan compiler.
	harga := map[string]int{"teh": 5000, "kopi": 12000}
	if v, ok := harga[string([]byte("kopi"))]; ok {
		fmt.Println("harga    :", v)
	}
}
