Struct
Pada sesi ini akan di bahas apa itu Struct pada Go
Go tidak memiliki class seperti yang ada di bahasa-bahasa strict OOP lain. Tapi Go memiliki tipe data struktur yang disebut dengan Struct.
Struct adalah kumpulan definisi variabel (atau property) dan fungsi (atau method), yang dibungkus sebagai tipe data baru dengan nama tertentu. Property dalam struct, tipe datanya bisa bervariasi. Mirip seperti map
, hanya saja key-nya sudah didefinisikan di awal, dan tipe data tiap itemnya bisa berbeda.
Konsep struct di GO mirip dengan konsep class pada OOP, meski sebenarnya berbeda
Dengan memanfaatkan struct, grouping data akan lebih mudah dan tidak sulit untuk di-maintain.
Keyword type
digunakan untuk mendeklarasikan sebuah struct:
type Person struct {
Name string
Age int
}
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
fmt.Println(Person{"David", 26})
}
Pada kode di atas kita membuat sebuah struct bernama person
yang berisi property name
dengan tipe string
dan age
dengan tipe int
.

Membuat Instance dan Mengakses Object Struct
Kita dapat melakukan inisialisasi object dari struct
dengan cara menambahkan tanda kurung kurawal {}
setelah nama struct
seperti berikut ini:
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
p1 := Person{}
p1.Name = "David Winalda"
p1.Age = 26
fmt.Println(p1.Name)
fmt.Println(p1.Age)
}
Pada kode di atas kita membuat sebuah instance dari struct yaitu p1
yang diassign dengan data yang diinginkan. Lalu untuk mengakses properti dari struct, gunakan .
pada nama struct atau instance dari struct. Output program di atas adalah sebagi berikut:

Kita juga bisa langsung mengisi nilai dari instance struct pada saat inisiasi seperti berikut ini dengan catatan urutan nilai harus sama dengan urutan property atau method yang di daftarkan.
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
p1 := Person{"David Winalda", 26}
fmt.Println(p1.Name)
fmt.Println(p1.Age)
}
atau
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
p1 := Person{Age: 26, Name: "David Winalda"}
fmt.Println(p1.Name)
fmt.Println(p1.Age)
}
untuk cara di atas tidak perlu mengisi nilai struct secara terurut.
Embedded Struct
Embedded struct adalah menggunakan sebuah struct sebagai properti pada struct lain.
package main
import "fmt"
type Person struct {
Name string
Age int
}
type Student struct {
Person
Batch string
}
func main() {
s1 := Student{}
s1.Name = "David Winalda"
s1.Age = 27
s1.Batch = "Batch 1"
fmt.Println(s1.Name)
fmt.Println(s1.Age)
fmt.Println(s1.Batch)
}
Pada kode di atas kita membuat 2 buat struct yaitu person
dan student
. Struct pada student
memiliki properti person
yang juga merupakan sebuah struct
.

Embedded struct bersifat mutable, nilai property-nya nya bisa diubah.
Khusus untuk properti yang bukan properti asli (properti turunan dari struct lain), bisa diakses dengan cara mengakses struct parent-nya terlebih dahulu, contohnya s1.person.batch
. Nilai yang dikembalikan memiliki referensi yang sama dengan s1.batch
.
package main
import "fmt"
type Person struct {
Name string
Age int
}
type Student struct {
Person
Batch string
}
func main() {
s1 := Student{}
s1.Name = "David Winalda"
s1.Age = 27
s1.Batch = "Batch 1"
fmt.Println(s1.Name)
fmt.Println(s1.Age)
fmt.Println(s1.Person.Age) // Mengakses properti dari struct person
fmt.Println(s1.Batch)
}
Embedded Struct Dengan Nama Property Yang Sama
Jika salah satu nama properti sebuah struct memiliki kesamaan dengan properti milik struct lain yang di-embed, maka untuk mengakses property-nya harus dilakukan secara eksplisit atau jelas.
package main
import "fmt"
type Person struct {
Name string
Age int
Alamat string
}
type Student struct {
Person
Batch string
Alamat string
}
func main() {
s1 := Student{}
s1.Name = "David Winalda"
s1.Age = 27
s1.Batch = "Batch 1"
s1.Person.Alamat = "Jalan original person s1"
s1.Alamat = "Jalan alternatif person s1"
fmt.Println(s1.Name)
fmt.Println(s1.Age)
fmt.Println(s1.Person.Alamat)
fmt.Println(s1.Alamat)
}

Anonymous Struct
Anonymous struct adalah struct yang tidak dideklarasikan di awal sebagai tipe data baru, melainkan langsung ketika pembuatan instance. Teknik ini digunakan untuk pembuatan variabel instance yang struct-nya hanya dipakai sekali.
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
s1 := struct {
Person
Batch string
}{}
s1.Name = "David Winalda"
s1.Age = 27
s1.Batch = "Batch 1"
fmt.Println(s1.Name)
fmt.Println(s1.Age)
fmt.Println(s1.Batch)
}

Last updated
Was this helpful?