Last active
February 2, 2026 05:52
-
-
Save solanoize/d6ee4b949fa7e54e97706f1d5362b27c to your computer and use it in GitHub Desktop.
Catatan Pointer Go Lang
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // You can edit this code! | |
| // Click here and start typing. | |
| package main | |
| import "fmt" | |
| type User struct { | |
| Name string | |
| Age int | |
| } | |
| func changeNameByValue(u User) { | |
| u.Name = "Andi" | |
| } | |
| func changeNameByPointer(u *User) { | |
| u.Name = "Andi" | |
| } | |
| func resetAge(age *int) { | |
| *age = 0 | |
| } | |
| func (u *User) Rename(name string) { | |
| u.Name = name | |
| } | |
| func main() { | |
| user := User{ | |
| Name: "Budi", | |
| Age: 25, | |
| } | |
| // Awal: {Budi 25} | |
| fmt.Println("Awal:", user) | |
| changeNameByValue(user) | |
| // Setelah changeNameByValue: {Budi 25} | |
| fmt.Println("Setelah changeNameByValue:", user) | |
| changeNameByPointer(&user) | |
| // Setelah changeNameByPointer: {Andi 25} | |
| fmt.Println("Setelah changeNameByPointer:", user) | |
| resetAge(&user.Age) | |
| // Setelah resetAge: {Andi 0} | |
| fmt.Println("Setelah resetAge:", user) | |
| user.Rename("Joko") | |
| // Setelah Rename: {Joko 0} | |
| fmt.Println("Setelah Rename:", user) | |
| // Bikin struct langsung dalam bentuk pointer | |
| userPtr := &User{ | |
| Name: "Siti", | |
| Age: 30, | |
| } | |
| // Ga usah lagi pake * | |
| changeNameByPointer(userPtr) | |
| fmt.Println("User pointer:", userPtr.Name, userPtr.Age) | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package main | |
| import "fmt" | |
| // ===================== | |
| // INT | |
| // ===================== | |
| // value (ga ngaruh) | |
| func addByValue(x int) { | |
| x = x + 10 | |
| } | |
| // pointer (ngaruh) | |
| func addByPointer(x *int) { | |
| *x = *x + 10 | |
| } | |
| // ===================== | |
| // STRING | |
| // ===================== | |
| // value | |
| func changeNameByValue(name string) { | |
| name = "Andi" | |
| } | |
| // pointer | |
| func changeNameByPointer(name *string) { | |
| *name = "Andi" | |
| } | |
| // ===================== | |
| // BOOL | |
| // ===================== | |
| // value | |
| func setActiveByValue(active bool) { | |
| active = true | |
| } | |
| // pointer | |
| func setActiveByPointer(active *bool) { | |
| *active = true | |
| } | |
| // ===================== | |
| // MAIN | |
| // ===================== | |
| func main() { | |
| // ---- INT | |
| age := 20 | |
| addByValue(age) | |
| fmt.Println("INT value:", age) // 20 | |
| addByPointer(&age) | |
| fmt.Println("INT pointer:", age) // 30 | |
| // ---- STRING | |
| name := "Budi" | |
| changeNameByValue(name) | |
| fmt.Println("STRING value:", name) // Budi | |
| changeNameByPointer(&name) | |
| fmt.Println("STRING pointer:", name) // Andi | |
| // ---- BOOL | |
| isActive := false | |
| setActiveByValue(isActive) | |
| fmt.Println("BOOL value:", isActive) // false | |
| setActiveByPointer(&isActive) | |
| fmt.Println("BOOL pointer:", isActive) // true | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package main | |
| import "fmt" | |
| func main() { | |
| // ===================== | |
| // STRING | |
| // ===================== | |
| name := "Budi" | |
| x := &name // x pegang alamat name | |
| fmt.Println(*x) // buka isi alamat -> "Budi" | |
| *x = "Andi" // ubah isi alamat | |
| fmt.Println(name) // name ikut berubah -> "Andi" | |
| // ===================== | |
| // INT | |
| // ===================== | |
| age := 25 | |
| y := &age // y pegang alamat age | |
| fmt.Println(*y) // 25 | |
| *y = 30 // ubah isi alamat | |
| fmt.Println(age) // 30 | |
| } |
Comments are disabled for this gist.