Menu
CoddyTech

Fungsi new()

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 22 dari 107.

Go menyediakan fungsi bawaan bernama new() yang mengalokasikan memori untuk suatu tipe dan mengembalikan pointer ke tipe tersebut. Memori yang dialokasikan diinisialisasi dengan nilai nol tipe tersebut.

p := new(int)      // mengalokasikan memori untuk int
fmt.Println(*p)    // 0 (nilai nol)
fmt.Println(p)     // 0xc000018030 (alamat memori)

Fungsi new() menerima tipe sebagai argumennya dan mengembalikan pointer ke nilai nol baru yang dialokasikan dengan tipe tersebut. Ini sangat berguna saat kamu memerlukan pointer, tetapi tidak memiliki variabel yang sudah ada untuk dirujuk.

Dengan struct, new() membuat pointer ke struct dengan semua field diatur ke nilai nolnya.

type Person struct {
    Name string
    Age  int
}

p := new(Person)
fmt.Println(p.Name)  // "" (string kosong)
fmt.Println(p.Age)   // 0

Kamu mungkin bertanya-tanya kapan harus menggunakan new() dibandingkan operator alamat &. Kedua pendekatan di bawah ini setara:

// Menggunakan new()
p1 := new(Person)

// Menggunakan operator alamat dengan literal
p2 := &Person{}

Sintaks &Person{} lebih umum digunakan karena memungkinkan kamu menginisialisasi field sekaligus. Gunakan new() jika kamu secara khusus menginginkan instance dengan nilai nol dan lebih memilih semantik alokasi memori yang eksplisit.

challenge icon

Tantangan

Mudah

Mari buat pengelola konfigurasi yang menunjukkan cara new() mengalokasikan memori dan menginisialisasi struct dengan nilai nolnya. Kamu akan melihat perbedaan pendekatan ini dengan penggunaan operator alamat bersama literal struct.

Kamu akan menyusun kodemu dalam dua file:

  • config.go: Definisikan struct ServerConfig dengan field Host (string), Port (int), MaxConnections (int), dan DebugMode (bool). Buat dua fungsi:
    • NewServerConfig yang menggunakan new() untuk mengalokasikan ServerConfig dan langsung mengembalikan pointer (dengan semua nilai nol)
    • ConfigureServer yang menerima pointer *ServerConfig bersama string host dan integer port, lalu menetapkan field tersebut pada konfigurasi melalui pointer
    Tambahkan juga method Display pada *ServerConfig yang mengembalikan string berformat dan menampilkan semua nilai konfigurasi.
  • main.go: Baca host dan port dari input. Pertama, buat konfigurasi menggunakan NewServerConfig() dan tampilkan untuk menunjukkan nilai nol. Lalu gunakan ConfigureServer untuk menetapkan host dan port, kemudian tampilkan konfigurasi lagi untuk menunjukkan nilai yang telah diperbarui.

Input berikut akan diberikan:

  • Baris 1: Nama host (string)
  • Baris 2: Nomor port (integer)

Method Display-mu harus mengembalikan string dengan format persis seperti ini:

Host: [Host]
Port: [Port]
MaxConnections: [MaxConnections]
DebugMode: [DebugMode]

Cetak output tampilan dua kali, sekali sebelum konfigurasi (menampilkan nilai nol) dan sekali setelah konfigurasi (menampilkan host dan port yang telah diperbarui).

Misalnya, jika diberikan localhost dan 8080, outputmu seharusnya:

Host: 
Port: 0
MaxConnections: 0
DebugMode: false
Host: localhost
Port: 8080
MaxConnections: 0
DebugMode: false

Perhatikan bahwa tampilan pertama menunjukkan semua nilai nol (string kosong, 0, 0, false) karena new() menginisialisasi semuanya dengan nilai nol. Setelah memanggil ConfigureServer, hanya host dan port yang berubah, sementara field lainnya tetap memiliki nilai nol.

Coba sendiri

package main

import (
	"fmt"
)

func main() {
	// Baca input
	var host string
	var port int
	fmt.Scanln(&host)
	fmt.Scanln(&port)

	// TODO: Buat konfigurasi dengan NewServerConfig() lalu tampilkan
	// Ini akan menampilkan nilai nol

	// TODO: Gunakan ConfigureServer untuk mengatur host dan port

	// TODO: Tampilkan lagi konfigurasi untuk melihat nilai yang sudah diperbarui
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Go online