package main

import (
	"fmt"
	"strconv"
	"strings"
)

func main() {
	// Dasar: buat Builder, tulis, lalu ambil hasilnya.
	var b strings.Builder
	b.WriteString("Halo")
	b.WriteString(", ")
	b.WriteString("Budi")
	b.WriteString("!")
	fmt.Println("hasil   :", b.String())
	fmt.Println("panjang:", b.Len())

	// Grow menyiapkan kapasitas sebelum penulisan beruntun.
	bahasa := []string{"go", "rust", "py", "js"}
	var daftar strings.Builder
	daftar.Grow(16)
	for i, p := range bahasa {
		if i > 0 {
			daftar.WriteString(", ")
		}
		daftar.WriteString(p)
	}
	fmt.Println("daftar  :", daftar.String())

	// Reset mengosongkan isi agar Builder dipakai ulang.
	daftar.Reset()
	daftar.WriteString("mulai lagi")
	fmt.Println("reset   :", daftar.String())

	// Menggabung ribuan potongan menjadi satu string.
	var besar strings.Builder
	for i := range 1000 {
		if i > 0 {
			besar.WriteString(";")
		}
		besar.WriteString("potongan-")
		besar.WriteString(strconv.Itoa(i))
	}
	hasil := besar.String()
	fmt.Println("jumlah  :", len(hasil), "byte")
	fmt.Println("awal    :", hasil[:23])
	fmt.Println("akhir   :", hasil[len(hasil)-18:])
}
