Struct #
Dalam bahasa pemrograman Golang, struct
adalah tipe data yang digunakan untuk mengelompokkan beberapa nilai menjadi satu entitas. Nilai-nilai ini disebut dengan “fields” dan dapat berupa tipe data yang berbeda. Golang tidak memiliki konsep kelas (class) seperti dalam bahasa pemrograman berorientasi objek (OOP) lainnya seperti Java atau C++, tetapi struct
dapat digunakan bersama dengan metode untuk mencapai fungsionalitas yang mirip dengan kelas.
Berikut adalah penjelasan tentang penggunaan struct
dalam Golang beserta contohnya:
Mendefinisikan Struct #
Struct didefinisikan dengan kata kunci type
diikuti dengan nama struct dan kata kunci struct
.
package main
import "fmt"
// Mendefinisikan struct
type Person struct {
Name string
Age int
}
func main() {
// Membuat instance dari struct
person1 := Person{Name: "Alice", Age: 30}
fmt.Println(person1)
}
Mengakses Fields dalam Struct #
Fields dalam struct dapat diakses menggunakan operator titik (.
).
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
person1 := Person{Name: "Alice", Age: 30}
fmt.Println(person1.Name) // Output: Alice
fmt.Println(person1.Age) // Output: 30
}
Membuat Instance Struct tanpa Menyebutkan Nama Fields #
Anda dapat membuat instance struct tanpa menyebutkan nama fields, tetapi harus mengikuti urutan deklarasi fields dalam definisi struct.
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
person1 := Person{"Alice", 30}
fmt.Println(person1)
}
Struct dengan Fields Anonim #
Anda dapat mendefinisikan struct dengan fields anonim yang hanya menyebutkan tipe data.
package main
import "fmt"
type Address struct {
string
int
}
func main() {
address := Address{"Main Street", 123}
fmt.Println(address)
fmt.Println(address.string) // Output: Main Street
fmt.Println(address.int) // Output: 123
}
Embedding Struct #
Struct dapat di-embed dalam struct lain untuk mencapai komposisi dan penggabungan properti dari beberapa struct.
package main
import "fmt"
type Person struct {
Name string
Age int
}
type Employee struct {
Person
Position string
}
func main() {
employee1 := Employee{
Person: Person{Name: "Bob", Age: 25},
Position: "Developer",
}
fmt.Println(employee1)
fmt.Println(employee1.Name) // Output: Bob
fmt.Println(employee1.Position) // Output: Developer
}
Metode pada Struct #
Metode adalah fungsi yang memiliki receiver (penerima) berupa instance dari struct. Metode memungkinkan kita untuk menambahkan fungsionalitas ke struct.
package main
import "fmt"
type Person struct {
Name string
Age int
}
// Metode pada struct Person
func (p Person) Greet() {
fmt.Printf("Hello, my name is %s and I am %d years old.\n", p.Name, p.Age)
}
func main() {
person1 := Person{Name: "Alice", Age: 30}
person1.Greet() // Output: Hello, my name is Alice and I am 30 years old.
}
Pointer Receiver #
Metode dengan receiver pointer memungkinkan Anda untuk mengubah nilai dari fields dalam struct.
package main
import "fmt"
type Person struct {
Name string
Age int
}
// Metode dengan pointer receiver
func (p *Person) HaveBirthday() {
p.Age++
}
func main() {
person1 := Person{Name: "Alice", Age: 30}
person1.HaveBirthday()
fmt.Println(person1.Age) // Output: 31
}
Inisialisasi Struct dengan New #
Anda dapat menggunakan fungsi new
untuk mengalokasikan memori dan mengembalikan pointer ke struct.
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
person1 := new(Person)
person1.Name = "Alice"
person1.Age = 30
fmt.Println(person1) // Output: &{Alice 30}
}
Contoh Lengkap Penggunaan Struct dan Metode #
package main
import "fmt"
// Mendefinisikan struct
type Person struct {
Name string
Age int
}
// Metode pada struct Person
func (p Person) Greet() {
fmt.Printf("Hello, my name is %s and I am %d years old.\n", p.Name, p.Age)
}
// Metode dengan pointer receiver
func (p *Person) HaveBirthday() {
p.Age++
}
// Struct dengan embedding
type Employee struct {
Person
Position string
}
func main() {
// Membuat instance dari struct
person1 := Person{Name: "Alice", Age: 30}
person1.Greet() // Output: Hello, my name is Alice and I am 30 years old.
// Mengubah nilai field menggunakan metode dengan pointer receiver
person1.HaveBirthday()
fmt.Println(person1.Age) // Output: 31
// Membuat instance dari struct dengan embedding
employee1 := Employee{
Person: Person{Name: "Bob", Age: 25},
Position: "Developer",
}
employee1.Greet() // Output: Hello, my name is Bob and I am 25 years old.
fmt.Println(employee1.Position) // Output: Developer
}
Kesimpulan #
Dengan memahami penggunaan struct
dan metode dalam Golang, Anda dapat membuat kode yang lebih terorganisir, modular, dan mudah untuk dipelihara, mirip dengan prinsip-prinsip pemrograman berorientasi objek.