👨‍💻
Dokumentasi Golang (PT Phincon)
  • 🚀Dokumentasi Bootcamp (PT Phincon)
  • Command di Golang
  • Static Type di Golang
  • Variable and Constant
    • Variable daI Constant
    • Deklarasi Variabel
    • Iota (Auto Increment)
    • Blank Identifier (Variable Underscore)
    • Access Modifier (Public or Private)
  • Tipe Data Primitif
    • Integer dan Unsigned Integer
    • Float dan Complex
    • String
    • Boolean
  • Tipe Data Aggregate
    • Array
    • Struct
  • Tipe Data Reference
    • Slice
    • Map
    • Function in Golang
      • Function
      • Function vs Method
      • Function vs Procedure
      • Private vs Public Function
      • Function Init dan Main
      • Function dengan Return Multiple Value
      • Variadic Function
      • Function sebagai Parameter
      • Anonymous Function
      • Input Function dari CLI
      • Exercise (Function)
  • Default Value setiap Tipe Data
  • Type Declaration di Golang
    • Type Declaration
    • Type Declaration Built-In di Golang
  • Kebab Case, Camel Case, Snake Case & Pascal Case di Golang
  • Konversi Tipe Data
  • If-Else dan Switch
    • If Else
    • Switch
    • Exercise
  • Looping
    • Looping For
    • Looping for range
    • Infinite Looping
    • Penerapan Looping pada Sorting
  • Operator di Golang
    • Arithmetic Operator
    • Assignment Operator
    • Relational Operator
    • Logic Operator
  • Interface
  • Interface Kosong atau Any
  • Nil
  • Pointer
    • Pass By Value dan Pass By Reference
    • Pointer (Pass By Reference)
    • Operator Address (& dan *)
    • Default Value Pointer
    • Tricky Case
    • Pointer pada Parameter di Function
    • Pointer pada Method
  • Package
    • Fmt
    • Rand
    • Os
    • Strings
      • To Lower
      • Contains
      • Split
      • Trim
      • Atoi
      • Itoa
      • EqualFold
    • Random Generator
    • Time
      • Get Current Time By Location
      • Time Sleep
      • Time Since
      • Timer & After
      • AfterFunc
      • Ticker & Tick
  • Go dan JSON
    • JSON vs XML
    • Unmarshal vs Marshal
    • Marshal (Go Object -> JSON)
    • Unmarshal (JSON -> Go Object)
    • Streaming Decoder & Encoder
    • Tag
    • JSON Go Return Byte
  • Go dan CSV
    • Insert Data ke File CSV
    • Insert 1.000.000 Data ke File CSV
  • Goroutine
    • Concurrency vs Parrarel
    • Go Routine Sederhana
    • Go Routine vs Synchronous
    • Wait Group
    • Defer
    • Channel
    • Buffered Channel
    • Select Channel
    • Deadlock - All goroutines are asleep
    • Race Condition
    • Mutex (Mutual Exclusion)
    • RW Mutex vs Mutex
    • Once
    • Pool
    • Atomic
    • Go Max Procs
    • Exit
    • Exercise 1 : Go Routine + Context + Channel
    • Exercise 2 : Worker (Go Routine + Channel + Context)
    • Exercise 3 : Random Worker (Go Routine + Channel + Context)
    • Exercise : Implementasi Goroutine dan Channel pada File CSV
  • Go Context
    • Pengenalan Context
    • Context Background & TODO
    • Context With Value
    • Context WithDeadline dan Context WithTimeout
    • Context WithCancel dan Context Done
  • Pengenalan HTTP
  • Go Native HTTP
    • HTTP Server
    • HTTP Server Multi Handler
    • HTTP Server dengan Serve Mux
    • HTTP Response Writer
    • HTTP Test
    • Routing
    • Konsep Middleware
    • Middleware
    • Get Query Parameter
    • Get Path Parameter
    • Request JSON
    • Request Form
    • Get dan Set Header
    • Get dan Set Cookie
    • Redirect
    • Serve File
    • Upload File
    • Download File
    • Hit Endpoint dengan Curl di Terminal
  • Go Gin Framework
    • HTTP Server
    • Router
    • Middleware
    • Get Query Parameter
    • Get Path Parameter
    • Request JSON
    • Request Form
    • Get dan Set Header
    • Get dan Set Cookie
    • Redirect
    • Serve File
    • Upload File
    • Download File
  • Golang dan Database
    • Instalasi MySQL dengan Docker Desktop
    • Instalasi PostgreSQL dengan Docker
    • Basic SQL
    • SQL Join
    • SQL Relation
    • Golang Database Driver
    • Golang dan SQL
  • Go Unit Test
    • Method di Package Testing
    • Package Assert & Require
    • Running Sub Test
    • Table Test
    • Generate Coverage Unit Testing dalam Bentuk HTML
  • Sonar Qube dan Sonar Scanner
  • Logging
  • Golang dan Redis
  • Golang dan RabbitMQ
    • Instalasi RabbitMQ dengan Docker
    • Instalasi Package RabbitMQ di Golang
    • Publisher dan Consumer
    • Publisher dan Multi Consumer
    • Setting RabbitMQ (Durable, Auto Delete dan Ack)
  • Git Command
  • Git Clone dengan SSH
  • Anotasi dan Package di Java Spring Boot
Powered by GitBook
On this page
  • Membuat Slice dari Array
  • Membuat Slice dengan Fungsi Make
  • Contoh Code Deklarasi Slice dengan Capacity > Length
  • Contoh Code Deklarasi Slice dengan Capacity < Length
  • Input Value lebih dari Length Slice
  • Kekurangan Slice
  • Add Value
  • Update Value
  • Delete Value
  • Informasi tambahan
  1. Tipe Data Reference

Slice

Slice merupakan tipe data reference di Golang yang hampir mirip dengan array. Perbedaanya tidak perlu ada length declaration seperti array. Kelebihan dari slice yaitu tidak perlu mendefinisikan berapa banyak value yang akan ditampung dalam data. Sementara kekurangan dari slice yaitu saat di inputkan value yang melebihi capasitas slice, maka capasitas slice akan menjadi 2 kali lipat.

Membuat Slice dari Array

Slice dapat dibuat dengan mengambil value dari suatu array seperti contoh di bawah ini.

package main

import "fmt"

func main() {
	arr := [5]int{1, 2, 3, 4, 5}
	slice := arr[1:4]
	fmt.Println(slice)
	fmt.Println(len(slice))
	fmt.Println(cap(slice))

	slice = append(slice, 5, 6)
	fmt.Println(slice)
	fmt.Println(len(slice))
	fmt.Println(cap(slice))
}
[2 3 4]
3
4
[2 3 4 5 6]
5
8

Membuat Slice dengan Fungsi Make

Make digunakan untuk membuat suatu slice. Fungsi make memiliki 3 input parameter yaitu tipe data, length dan capacity. Capacity harus lebih dari length (capacity > length). Capacity ibaratkan beberapa kotak untuk menyimpan suatu nilai, sementara length dapat diartikan berapa kotak yang sudah diisi suatu nilai. Make akan mengisi capacity dari suatu slice dengan default value dari tipe data yang digunakan.

Contoh Code Deklarasi Slice dengan Capacity > Length

package main

import (
	"fmt"
)

func main() {
	// slice int
        slice1 := make([]int, 5, 5)
	fmt.Println(slice1)
	// slice string
	slice2 := make([]string, 5, 5)
	fmt.Println(slice2)
	// slice float64
	slice3 := make([]float64, 5, 5)
	fmt.Println(slice3)
	// slice bool
	slice4 := make([]bool, 5, 5)
	fmt.Println(slice4)
}
[0 0 0 0 0]
[    ]
[0 0 0 0 0]
[false false false false false]

Contoh Code Deklarasi Slice dengan Capacity < Length

package main
import "fmt"

func main() {
    a := make([]int, 5, 2)
    fmt.Println(a)
}
invalid argument: length and capacity swapped

Input Value lebih dari Length Slice

package main
import "fmt"

func main() {
    a := make([]int, 5, 6)
    a[0], a[1], a[2], a[3], a[4], a[5] = 1, 2, 3, 4, 5, 6
    fmt.Println(a)
}
panic: runtime error: index out of range [5] with length 5

Kekurangan Slice

Saat kita menginputkan suatu value ke dalam slice yang melebihi length dari slice, capacity dari slice tersebut akan menjadi 2 kali lipatnya. Cotohnya seperti code dibawah ini. Slice s yang awalnya tidak mempunyai value, kemudian di isi value secara bertahap menggunakan looping. Lalu di tampilkan kapasitas dan length dari slice tersebut.

package main
import "fmt"

func main() {
    s := make([]int, 0, 3)
    fmt.Println(s)
    for i := 0; i < 20; i++ {
        s = append(s, i)
        fmt.Printf("cap %v, len %v, %p\n", cap(s), len(s), s)
    }
}
[]
cap 3, len 1, 0xc000018018
cap 3, len 2, 0xc000018018
cap 3, len 3, 0xc000018018
cap 6, len 4, 0xc000014270
cap 6, len 5, 0xc000014270
cap 6, len 6, 0xc000014270p
cap 12, len 7, 0xc00005e060
cap 12, len 8, 0xc00005e060
cap 12, len 9, 0xc00005e060
cap 12, len 10, 0xc00005e060
cap 12, len 11, 0xc00005e060
cap 12, len 12, 0xc00005e060
cap 24, len 13, 0xc00007a000
cap 24, len 14, 0xc00007a000
cap 24, len 15, 0xc00007a000
cap 24, len 16, 0xc00007a000
cap 24, len 17, 0xc00007a000
cap 24, len 18, 0xc00007a000
cap 24, len 19, 0xc00007a000
cap 24, len 20, 0xc00007a000

Add Value

Untuk menambahkan value dalam suatu slice dapat menggunakan fungsi append.

package main
import "fmt"

func main() {
    a := []int{1,2,3,4,5}
    a = append(a, 6)
    fmt.Println(a)
}
[1 2 3 4 5 6]

Update Value

Untuk memperbaruhi value dengan index tertentu dari suatu slice, dapat langsung diubah seperti contoh di bawah ini.

package main
import "fmt"

func main() {
    a := [5]int{1,2,3,4,5}
    a[2] = 10
    fmt.Println(a)
}
[1 2 10 4 5]

Delete Value

Untuk menghapus suatu value dengan index tertentu di slice dapat menggunakan fungsi append. Dimana append memiliki format append(slice, ...value). Parameter kedua dalam fungsi append merupakan variadic function, yang berarti append dapat menerima lebih dari 2 input.

package main
import "fmt"

func main() {
    a := []int{1,2,3,4,5}
    a = append(a[:2], a[2+1:]...)
    fmt.Println(a)
}
[1 2 4 5]

Kodingan di atas sama memiliki algoritma yang sama dengan kodingan di bawah ini :

package main
import "fmt"

func main() {
    a := []int{1,2,3,4,5}
    a = append(a[:2], []int{4,5}...)
    fmt.Println(a)
}
package main
import "fmt"

func main() {
    a := []int{1,2,3,4,5}
    a = append(a[:2], 4, 5)
    fmt.Println(a)
}

Informasi tambahan

Suatu slice misalkan s akan disimpan dengan memory address yang berbeda dengan value-value di dalam slice tersebut.

package main
import "fmt"

func main() {
    s := make([]int, 0, 3)
    for i := 0; i < 5; i++ {
        s = append(s, i)
        fmt.Printf("cap %v, len %v, %p\n", cap(s), len(s), s)
        for i := range s {
            val := &i
            fmt.Println(val)
        }
    }
}
cap 3, len 1, 0xc000018018
0xc00001a050
cap 3, len 2, 0xc000018018
0xc00001a058
0xc00001a058
cap 3, len 3, 0xc000018018
0xc00001a060
0xc00001a060
0xc00001a060
cap 6, len 4, 0xc000014270
0xc00001a068
0xc00001a068
0xc00001a068
0xc00001a068
cap 6, len 5, 0xc000014270
0xc00001a070
0xc00001a070
0xc00001a070
0xc00001a070
0xc00001a070

PreviousTipe Data ReferenceNextMap

Last updated 1 year ago