unisbadri.com » Python Java Golang Typescript Kotlin Ruby Rust Dart PHP
Struct

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.

« Fungsi
Interface »