Skip to content

Data Type

Yuki San edited this page Mar 16, 2023 · 10 revisions

Struct

Merupakan sebuah tipe data key-value pair, mungkin dapat di sama kan dengan object? tapi sepertinya under the hood behaviour-nya berbeda

struct pada golang dapat di implementasikan dengan berbagai cara, untuk melihat metode-metode pengimplementasianya silahkan kunjungi commit ini


adapun struct yang tidak mengandung property apapun alias kosong, biasanya digunakan sebagai return value yang void seperti contoh berikut:

type Success struct{}
type Failure struct{}

func DoSomething() interface{} {
    if success {
        return Success{}
    } else {
        return Failure{}
    }
}

contoh kode di atas mungkin akan berguna jika ada method yang di-bind pada struct kosong tersebut sehingga return value nya dapat di casting dan di panggil method yang berkaitan dengan salah satu struct tersebut (?)


dan perlu diingat juga, bahwa struct yang belum di assign, default valuenya adalah zero-value berdasarkan data tipenya masing2, seperti jika string maka zero-value nya adalah empty string "" dimana jika value tersebut di print tidak akan mengeluarkan apa2.


di golang juga struct dapat di inheritkan, contohnya dapat dilihat pada commit ini


pembelajaran penting dalam section ini adalah: saya jadi menyadari bahwa keyword var dan type di golang itu ternyata penting. Dimana dengan keyword var anda dapat membuat sebuah variabel, sedangkan keyword type hanya membuat tipe saja. Tetapi yang unik di golang adalah keyword type dapat di assign pada sebuah variabel dimana typescript tidak bisa melakukan itu :v


tetapi asssign type pada variabel juga memiliki sebuah persyaratan, yaitu harus assign value pada saat yang bersamaan

// hanya deklarasi
var student struct {
    grade int
}

// deklarasi sekaligus inisialisasi
var student = struct {
    grade int
} {
    12,
}

kita juga dapat membuat sebuah tag property pada struct, tag property itu singkatnya seperti aliases untuk mengakses prop tersebut (?)

type person struct {
    name string `tag1`
    age  int    `tag2`
}

umumnya penggunaan tag ini sering digunakan pada saat bermain dengan json dan bisa diakses pula melewati reflect :>

dan ada satu lagi teknik yang sering dipakai ketika bermain dengan json, yaitu penulisan struct secara nested seperti berikut

type student struct {
    person struct {
        name string
        age  int
    }
    grade   int
    hobbies []string
}

kita juga dapat membuat type alias pada sebuah struct

type Person struct {
    name string
    age  int
}
type People = Person

teknik tersebut dapat berguna jika kita melakukan casting type pada satu tipe ke tipe lain:

people := People{"wick", 21}
fmt.Println(Person(people))

person := Person{"wick", 21}
fmt.Println(People(person))

jadi fungsi ini sangat berguna untuk fleksibilitas, dan perlu di ingat type alias dapat dilakukan pada semua tipe data, tidak hanya struct saja.

Array

merupakan sebuah tipe data yang berisi kumpulan/collection dari berbagai native tipe data seperti bool, string, number, dll maupun non-native seperti fungsi, struct, dll dalam bahasa pemrograman ada beberapa tipe data lainnya yang termasuk kedalam keluarga array, jika di javascript seperti map, set (?). dan jika di golang itu ada slice, dan di python dictionary, dll (?) lalu apa perbedaan antara slice dan array di golang? silahkan simak tabel berikut untuk memahami perbedaannya:

Array | Slice | Map -- | -- ukuran / length untuk alokasinya wajib ditentukan pada saat deklarasi | dapat di-set tidak terbatas! | - tetapi lengthnya dapat diset otomatis dengan syarat declare+assign secara bersamaan | - | -

  • | - | -

saya jadi menyadari bahwa variable yang diberi prefix _ akan di ignore oleh compiler, sehingga menjadi lebih efesien (?)

Clone this wiki locally