Struktur di Golang

Structs di Golang adalah salah satu yang paling banyak digunakan dan cara untuk membuat tipe yang ditentukan pengguna.

Dalam hal ini, saya akan membahas semua dasar tentang struct dan bagaimana menggunakannya dalam program go Anda dengan beberapa contoh.

Mari kita mulai!

pengantar

SEBUAH struct adalah kumpulan beberapa bidang data dengan tipe data yang ditentukan dikelompokkan bersama. Mereka berguna untuk mengelompokkan data bersama untuk membentuk rekaman kustom. Sebuah struct terdiri dari tipe bawaan dan tipe yang ditentukan pengguna (struct itu sendiri adalah tipe yang ditentukan pengguna).

Structs di Golang dapat berubah yaitu dapat dimodifikasi di seluruh program.

Structs membantu dalam meningkatkan kualitas kode secara keseluruhan dengan memungkinkan kita membuat dan meneruskan struktur data yang kompleks ke berbagai modul. Bayangkan melewatkan 10 parameter ke dalam suatu fungsi, Anda akan segera lari dari kode. Inilah mengapa struct berguna, sekarang alih-alih 10 parameter, Anda cukup meneruskan satu struct ke fungsi itu.

Sebuah struct dideklarasikan menggunakan dua kata kunci – Tipe dan struktur. Itu dibungkus dengan kurung kurawal (seperti kelas di java) – yang berisi kumpulan bidang yang memiliki tipe yang ditentukan dan pengenal (nama). Kami membahas detail implementasi di bagian selanjutnya.

Jika Anda berasal dari latar belakang Pemrograman Berorientasi Objek (OOP), Anda dapat menganggap struct sebagai kelas tetapi tanpa pewarisan.

  HDMI 2.1: Apa yang Baru, dan Apakah Anda Perlu Memutakhirkan?

Mendeklarasikan struct

Sekarang, setelah Anda memahami apa itu struct dan mengapa struct digunakan, saatnya mempelajari cara mendeklarasikan struct. Kerangka dasar struct terlihat seperti –

type name_of_struct struct { 
     field1 data_type_field1 
     field2 data_type_field2 
 }

Di sini, type dan struct adalah kata kunci, sedangkan struct berisi banyak bidang dengan tipe data yang ditentukan.

Mari kita lihat contoh –

package main

import (
	"fmt"
)

type User struct {
	name        string
	age         int
	bankBalance float32
}

func main() {
	var user User
	fmt.Println(user)
}

Di sini, kami mendefinisikan struct Pengguna yang terdiri dari bidang string, int, dan float32. Di main() kami mendeklarasikan struct kami sebagai pengguna dan mencetaknya! Output yang kita dapatkan adalah nilai nol/kosong dari struct karena kita belum menginisialisasinya! Itu nilai nol pada dasarnya adalah nilai nol dari setiap bidang.

{ 0 0}

Inisialisasi struct

Pada bagian sebelumnya, kita telah mempelajari cara mendeklarasikan struct. Sekarang, kami ingin menginisialisasi atau memberi mereka nilai. Periksa kode di bawah tentang cara kami melakukannya –

package main

import (
	"fmt"
)

type User struct {
	name        string
	age         int
	bankBalance float32
}

func main() {
	// With field names
	user1 := User{
		name:        "Mohit",
		age:         24,
		bankBalance: 100.0,
	}
	
	// Without field names
	user2 := User{"Nidhi", 21, 1000.0}
	
	fmt.Println(user1)
	fmt.Println(user2)
}

Kode itu sendiri menjelaskan bagaimana kita menginisialisasi dua struct dengan dan tanpa nama field. Di sini, outputnya adalah –

{Mohit 24 100}
 {Nidhi 21 1000}

Dalam kasus di atas, jika salah satu bidang tidak diinisialisasi, maka bidang tersebut default ke nilai nolnya.

user1 := User{
	name:        "Mohit",
	age:         24,
}

 // Output - { Mohit 24 0.0 }

Ada satu cara lagi untuk membuat struct menggunakan kata kunci baru. Kami akan melihat cara menggunakannya di bagian selanjutnya.

  Cara Menghapus Akun Uber Eats

Mengakses bidang struct

Sekarang kita tahu cara membuat dan menginisialisasi struct, mari kita lihat cara mengakses bidang struct. Untuk ini, Golang memberi kami operator titik. Melanjutkan contoh sebelumnya, mari kita akses kolom nama dan usia dan mencetaknya.

package main

import (
	"fmt"
)

type User struct {
	name        string
	age         int
	bankBalance float32
}

func main() {
	// With field names
	user := User{
		name:        "Mohit",
		age:         24,
		bankBalance: 100.0,
	}

	fmt.Println(user.name)
	fmt.Println(user.age)
	fmt.Println(user.bankBalance)
}

Di sini, kami menggunakan struct_name.field_name untuk mengakses bidang dalam struct. Output dari kode di atas akan menjadi –

Mohit
 24
 100

Seperti yang disebutkan sebelumnya, kita dapat membuat struct dengan kata kunci baru. Mari kita lihat bagaimana –

user := new(User)
 user.name = "Mohit"
 user.age = 24
 user.bankBalance = 100.0

 fmt.Println(user)

 // Output - &{Mohit 24 100}

Kata kunci baru mengembalikan pointer ke struct yang diinisialisasi. Di Golang Anda tidak perlu melakukan dereferensi penunjuk secara eksplisit tetapi fmt.Println(*user) akan menghasilkan keluaran yang sama.

Struktur bersarang

Struktur dalam golang juga dapat berisi tipe lain yang ditentukan pengguna. Jadi, sebuah struct dapat berisi struct bersarang lainnya.

package main

import (
	"fmt"
)

type User struct {
	name        string
	age         int
	bankBalance float32
	roleDetails RoleDetails
}

type RoleDetails struct {
	position string
	team     string
}

func main() {
	roleDetailForMohit := RoleDetails{
		position: "Software Engineer",
		team:     "Transport",
	}
	user := User{
		name:        "Mohit",
		age:         24,
		bankBalance: 100.0,
		roleDetails: roleDetailForMohit,
	}

	fmt.Println(user)
}

Pada kode di atas, kita memiliki struct RoleDetails sebagai bagian dari User struct. Outputnya akan –

{Mohit 24 100 {Software Engineer Transport}}

Jika Anda ingin mengakses roleDetails, Anda dapat melakukannya menggunakan operator titik yang sama –

  Mengapa Mouse Saya Mengklik Dua Kali?

user.roleDetails.position

Kesetaraan Struktural

Dua struct sama jika masing-masing bidang yang mereka miliki sama (baik built-in dan ditentukan pengguna) tetapi tidak semua tipe data dapat dibandingkan. (peta tidak sebanding secara langsung). Mari kita lihat contoh untuk menunjukkan kesetaraan.

package main

import (
	"fmt"
)

type User struct {
	name        string
	age         int
	bankBalance float32
}

func main() {
	user1 := User{
		name:        "Mohit",
		age:         24,
		bankBalance: 100.0,
	}
	user2 := User{
		name:        "Mohit",
		age:         24,
		bankBalance: 100.0,
	}
	user3 := User{
		name:        "Nidhi",
		age:         21,
		bankBalance: 1000.0,
	}

	if user1 == user2 {
		fmt.Println("user1 and user2 are equal")
	} else {
		fmt.Println("user1 and user2 are not equal")
	}

	if user1 == user3 {
		fmt.Println("user1 and user3 are equal")
	} else {
		fmt.Println("user1 and user3 are not equal")
	}
}

Struktur nilai kosong dan nol adalah sama. Urutan kolom tidak masalah, pada dasarnya, setiap kolom harus cocok untuk kesetaraan. Output untuk kode di atas adalah –

user1 and user2 are equal
user1 and user3 are not equal

Kesimpulan

Luar biasa!

Sekarang Anda siap menggunakan struct di golang. Kami membahas semua dasar-dasar seperti deklarasi, inisialisasi, dan mengakses bidang struct. Kami juga melihat bagaimana membandingkan dua struct dan bahkan menerapkan struct bersarang. Berikut adalah beberapa sumber untuk mempelajari lebih lanjut tentang struct –

Masih banyak yang harus dipelajari tentang struct, tapi ini adalah awal yang baik untuk saat ini. Saya harap Anda belajar sesuatu yang baru!

Terus menjelajah. Terus belajar!