Golang Tutorial
Fundamentals
Control Statements
Functions & Methods
Structure
Arrays & Slices
String
Pointers
Interfaces
Concurrency
In Go, composite literals allow you to create and initialize values for arrays, slices, and maps. For slices, using composite literals can be very efficient in defining and populating them with initial values. This tutorial will guide you through the usage of slice composite literals in Go.
A slice composite literal is defined using the format []T{a, b, c, ...}
, where T
is the type of the elements in the slice.
package main import "fmt" func main() { fruits := []string{"apple", "banana", "cherry"} fmt.Println(fruits) // [apple banana cherry] }
You can specify indices for the values. This can be helpful if you want to initialize specific positions in the slice or even leave gaps.
nums := []int{0: 10, 2: 30, 3: 40} fmt.Println(nums) // [10 0 30 40]
For slices of structs, you can initialize each struct's fields using composite literals.
type Person struct { Name string Age int } people := []Person{ {"Alice", 25}, {"Bob", 30}, } fmt.Println(people) // [{Alice 25} {Bob 30}]
For slices containing other slices, you can use nested composite literals for initialization.
matrix := [][]int{ {1, 2}, {3, 4}, {5, 6}, } fmt.Println(matrix) // [[1 2] [3 4] [5 6]]
You can append a new slice to an existing one using the append
function combined with composite literals.
original := []int{1, 2, 3} additional := []int{4, 5, 6} result := append(original, additional...) fmt.Println(result) // [1 2 3 4 5 6]
If you're working with interfaces, you can use composite literals to create slices of interfaces.
type Shaper interface { Area() float64 } type Square struct { Side float64 } func (s Square) Area() float64 { return s.Side * s.Side } shapes := []Shaper{ Square{5.0}, Square{10.0}, } for _, shape := range shapes { fmt.Println(shape.Area()) }
append
can be powerful for building slices.Understanding and using slice composite literals will make your Go code more concise and expressive, especially when working with static or predefined data.
Creating slices with composite literals in Golang:
Composite literals in Go allow you to create slices using a concise syntax.
package main import "fmt" func main() { // Creating a slice with a composite literal numbers := []int{1, 2, 3, 4, 5} fmt.Println(numbers) }
Initializing slices using composite literals in Golang:
You can initialize a slice with composite literals and specify the values at the time of creation.
names := []string{"Alice", "Bob", "Charlie"}
Composite literals vs make() function for slices in Golang:
Both composite literals and the make()
function can be used to create slices. Use composite literals when you know the initial values, and use make()
when you need to specify the capacity and length separately.
// Composite literal a := []int{1, 2, 3} // Using make() b := make([]int, 3, 5)
Working with slice literals and array literals in Golang:
Slice literals create a new slice referencing an existing array or another slice. Array literals create a new array.
arr := [3]int{1, 2, 3} // Array literal slice := arr[:] // Slice literal newSlice := []int{4, 5} // Slice literal with values
Appending to slices created with composite literals in Golang:
You can use the append()
function to add elements to a slice created with a composite literal.
numbers := []int{1, 2, 3} numbers = append(numbers, 4, 5)
Composite literals and array/slice initialization in Golang:
Composite literals can be used to initialize both arrays and slices.
// Array initialization with composite literal array := [3]int{1, 2, 3} // Slice initialization with composite literal slice := []int{1, 2, 3}
Common errors and pitfalls with slice literals in Golang:
Be cautious with the capacity and length when using slice literals. A slice created with a literal may refer to the underlying array, causing unexpected behavior if the array is modified.
arr := [3]int{1, 2, 3} slice := arr[:] // Be careful with modifying the array