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.
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.
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 –
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!