Day 54 : membuat program sederhana go part 3 : Membandingkan program go dengan pointer dan tanpa pointer
Hari ini menandai perjalanan PKL saya di PT Excellent yang telah memasuki hari ke-54. Pengalaman selama lebih dari sebulan ini sangat berharga, terutama dalam memahami dinamika dunia kerja di bidang teknologi informasi. Setiap hari membawa tantangan dan pelajaran baru, mulai dari penyelesaian masalah teknis hingga penguasaan keterampilan baru yang sangat penting dalam mendukung pekerjaan di perusahaan ini.
Pada hari ke-54 ini, saya fokus mempraktikkan salah satu materi penting dalam pemrograman Go, yaitu pointer. Konsep pointer sangat penting untuk dipahami, karena berkaitan dengan cara data diakses dan dimodifikasi dalam memori. Pada kesempatan ini, saya menulis program sederhana menggunakan tipe data struct
, pointer (&
), dan menunjukkan bagaimana perubahan pada variabel pointer dapat mempengaruhi nilai asli dari variabel yang diacu.
Struktur Program
Deklarasi Package:
package main
Program ini menggunakan package main
, yang merupakan package utama dan titik masuk dalam program Go.
Import:
import "fmt"Bagian ini mengimpor packagefmt
, yang digunakan untuk mencetak output ke layar dengan fungsiPrintln
.
Tipe Data Struct:
type Address struct {City, Province, Country string}
Pada bagian ini, saya mendefinisikan tipe data struct
bernama Address
. struct
adalah tipe data yang dapat menyimpan beberapa field dengan tipe yang berbeda. Dalam contoh ini, struct
Address
terdiri dari tiga field:
City
(string)Province
(string) – Harap dicatat, dalam Go, jika field diawali dengan huruf kecil, field tersebut tidak dapat diakses dari luar package.Country
(string)
Fungsi main()
:
func main() {address1 := Address{"Bekasi", "Jawa barat", "Indonesia"}address2 := &address1
Di dalam fungsi main
, saya membuat variabel address1
bertipe Address
, diinisialisasi dengan nilai:
City = "Bekasi"
,Province = "Jawa Barat"
,Country = "Indonesia"
.
Variabel address2
kemudian dideklarasikan dengan menunjuk ke alamat memori address1
menggunakan simbol &
. Ini berarti address2
tidak menyimpan salinan dari address1
, tetapi mereferensikan memori yang sama. Oleh karena itu, setiap perubahan yang dilakukan melalui address2
akan mempengaruhi address1
.
Modifikasi Field City
:
address2.City = "Bandung"
Karena address2
adalah pointer ke address1
, perubahan nilai field City
melalui address2
akan langsung mempengaruhi address1
. Pada baris ini, field City
dari address1
diubah dari "Bekasi"
menjadi "Bandung"
.
Mencetak Nilai Struct:
fmt.Println(address1)fmt.Println(address2)
fmt.Println(address1)
: Mencetak nilaiaddress1
. KarenaCity
padaaddress1
telah diubah melaluiaddress2
, fieldCity
sekarang bernilai"Bandung"
, sementaraProvince
danCountry
tetap tidak berubah.fmt.Println(address2)
: Mencetak nilaiaddress2
, yang merupakan pointer keaddress1
. Karenaaddress2
menunjuk keaddress1
, hasil cetakannya akan sama.
Output Program:
Hasil dari program ini akan tampak seperti berikut:
{Bandung Jawa Barat Indonesia} &{Bandung Jawa Barat Indonesia}
{Bandung Jawa Barat Indonesia}
: Ini adalah hasil cetakanaddress1
, yang menunjukkan bahwa fieldCity
sekarang bernilai"Bandung"
.&{Bandung Jawa Barat Indonesia}
: Ini adalah hasil cetakanaddress2
, dengan simbol&
menunjukkan bahwaaddress2
adalah pointer keaddress1
.
Kesimpulan:
- Pointer (
&
): Saya menggunakan pointer untuk membuataddress2
mereferensikanaddress1
. Dengan demikian, setiap perubahan padaaddress2
akan langsung tercermin padaaddress1
. - Perubahan Berdasarkan Referensi: Karena
address2
menunjuk keaddress1
, perubahan padaCity
melaluiaddress2
juga mengubahCity
dariaddress1
. - Cetakan: Mencetak
address1
menunjukkan nilai yang telah diubah, dan mencetakaddress2
menunjukkan bahwa keduanya berbagi memori yang sama.
Contoh Program Tanpa Pointer:
Jika saya ingin memisahkan variabel agar perubahan pada satu tidak mempengaruhi yang lain, saya bisa membuat salinan address1
tanpa menggunakan pointer:
package mainimport "fmt"type Address struct {City, Province, Country string}func main() {address1 := Address{"Bekasi", "Jawa barat", "Indonesia"}address2 := address1address2.City = "Bandung"fmt.Println(address1)fmt.Println(address2)}
Output Program Tanpa Pointer:
{Bekasi Jawa Barat Indonesia} {Bandung Jawa Barat Indonesia}
- {Bekasi Jawa Barat Indonesia}: Cetakan
address1
menunjukkan bahwaCity
tidak berubah karenaaddress2
hanyalah salinan, bukan pointer. - {Bandung Jawa Barat Indonesia}: Cetakan
address2
menunjukkan bahwa hanya fieldCity
padaaddress2
yang diubah menjadi"Bandung"
.
Kesimpulan:
Pada contoh tanpa pointer, perubahan yang dilakukan pada address2
tidak memengaruhi address1
, karena address2
hanya merupakan salinan dari address1
. Hal ini menekankan perbedaan antara modifikasi menggunakan pointer dan tanpa pointer dalam Go.
Komentar
Posting Komentar