Langsung ke konten utama

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 package fmt, yang digunakan untuk mencetak output ke layar dengan fungsi Println.

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 nilai address1. Karena City pada address1 telah diubah melalui address2, field City sekarang bernilai "Bandung", sementara Province dan Country tetap tidak berubah.
  • fmt.Println(address2): Mencetak nilai address2, yang merupakan pointer ke address1. Karena address2 menunjuk ke address1, 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 cetakan address1, yang menunjukkan bahwa field City sekarang bernilai "Bandung".
  • &{Bandung Jawa Barat Indonesia}: Ini adalah hasil cetakan address2, dengan simbol & menunjukkan bahwa address2 adalah pointer ke address1.

Kesimpulan:

  • Pointer (&): Saya menggunakan pointer untuk membuat address2 mereferensikan address1. Dengan demikian, setiap perubahan pada address2 akan langsung tercermin pada address1.
  • Perubahan Berdasarkan Referensi: Karena address2 menunjuk ke address1, perubahan pada City melalui address2 juga mengubah City dari address1.
  • Cetakan: Mencetak address1 menunjukkan nilai yang telah diubah, dan mencetak address2 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 main

import "fmt"

type Address struct {
    City, Province, Country string
}

func main() {
    address1 := Address{"Bekasi", "Jawa barat", "Indonesia"}
    address2 := address1

    address2.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 bahwa City tidak berubah karena address2 hanyalah salinan, bukan pointer.
  • {Bandung Jawa Barat Indonesia}: Cetakan address2 menunjukkan bahwa hanya field City pada address2 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

Postingan populer dari blog ini

Day 109 : Akhir dari Perjalanan PKL: Terima Kasih untuk PT Excellent

Hari ini adalah hari terakhir saya menjalani PKL di PT Excellent. Momen ini menjadi penutup dari perjalanan yang luar biasa penuh pembelajaran, pengalaman, dan kenangan yang tak terlupakan. Saya ingin menyampaikan rasa terima kasih yang sebesar-besarnya kepada keluarga besar PT Excellent atas kesempatan, bimbingan, dan kepercayaan yang telah diberikan kepada saya selama saya melaksanakan PKL di sini. Selama PKL, saya mendapatkan banyak pengetahuan baru yang sebelumnya belum pernah saya pelajari. Dari segi teknis, saya belajar banyak tentang teknologi seperti Zimbra, bahasa pemrograman Golang, hingga DevOps hal-hal yang awalnya terasa asing, kini menjadi ilmu yang berharga dan menjadi ilmu baru bagi saya. Namun, pembelajaran saya di PT Excellent tidak hanya terbatas pada aspek teknis. Saya juga belajar tentang kedisiplinan, tanggung jawab, profesionalisme, serta bagaimana pentingnya kolaborasi dalam lingkungan kerja. Terima kasih kepada Mas Ridwan, yang selalu membimbing saya dengan sab...

Day 108 : H-2 menuju akhir PKL

Waktu rasanya berjalan begitu cepat. Hari ini sudah masuk H-2 menuju akhir masa PKL saya di PT Excellent. Ada perasaan campur aduk antara lega karena akhirnya berhasil menyelesaikan semuanya, senang karena banyak pengalaman baru yang saya dapatkan, tapi juga sedikit. PKL di PT Excellent bukan cuma soal kerjaan atau belajar teknis, tapi juga perjalanan penuh cerita dan pelajaran. Setiap hari yang saya jalani di sini selalu memberi pengalaman baru, baik dari tugas yang menantang, bimbingan dari mentor, maupun suasana kerja yang hangat. Salah satu hal yang paling membekas adalah semangat belajar dari Pak Bos. Beliau pernah bercerita tentang bagaimana sibuknya beliau tapi tetap bisa belajar bahasa baru bahkan lebih dari satu bahasa. Itu benar-benar membuka mata saya, bahwa waktu senggang yang sering terbuang sebenarnya bisa dimanfaatkan untuk hal-hal yang lebih produktif. Mas Ridwan, yang selalu menemani kami saat briefing pagi, juga memberikan banyak pelajaran berharga. Setiap pagi kami b...

Day 82 : Membuat image dengan bahasa pemrograman golang

Hari ini, saya melanjutkan perjalanan belajar Docker dengan memanfaatkan Visual Studio Code (VSCode), editor favorit saya. Fokus utama saya adalah memahami cara membuat Docker image menggunakan alur kerja yang terintegrasi dengan VSCode. Proses ini tidak hanya efisien tetapi juga menyenangkan karena VSCode memiliki ekosistem yang kaya, termasuk berbagai ekstensi pendukung yang mempermudah pekerjaan. Mengapa Menggunakan VSCode untuk Docker? VSCode menyediakan lingkungan pengembangan yang lengkap dengan berbagai fitur, seperti: Docker Extension : Mempermudah pengelolaan image, container, dan jaringan Docker langsung dari editor. Terminal Terintegrasi : Menjalankan perintah Docker langsung dari VSCode tanpa perlu beralih aplikasi. Debugging Tools : Membantu melacak masalah aplikasi yang berjalan di dalam container, terutama bagi pengembang Golang. Dengan semua keunggulan ini, VSCode menjadi alat yang sangat mendukung dalam pengembangan berbasis Docker. Langkah-langkah Membuat Docker Image...