DEV Community

Pallat Anchaleechamaikorn
Pallat Anchaleechamaikorn

Posted on

disguised pointer in Go

#go

ในภาษา Go นั้นมี pointer
ครับ ใครๆก็รู้ ซึ่งก็จะมี operator อยู่สองตัวที่จะมาใช้ก็คือ * และ &

แต่ๆๆ มันมีตัวแปรที่เป็น pointer แต่แกล้งทำหน้าตาไม่เหมือน pointer อยู่ใน Go อยู่หลายตัว ได้แก่

slice, map, chan, interface

4 type นี้เป็น pointer แต่แกล้งทำหน้าตาไม่เหมือน พิสูจน์ง่ายมาก แค่ประกาศตัวแปรลอยๆไว้แล้วถามเลยแบบนี้

    var s []string
    var m map[string]string
    var i interface{}
    var ch chan struct{}

    if s == nil { fmt.Println("s is nil") }
    if m == nil { fmt.Println("m is nil") }
    if i == nil { fmt.Println("i is nil") }
    if ch == nil { fmt.Println("ch is nil") }
Enter fullscreen mode Exit fullscreen mode

ผลลัพธ์มันตอบ nil ทั้ง 4 บรรทัดเลย คือไอ้ตัวแปรประเภท pointer เนี่ย มันมี zero value เป็น nil ไงครับ

ด้วยความที่หน้าตามันไม่เหมือน pointer ปกติบางทีเลยอาจจะเข้าใจมันผิด เพราะฉะนั้นวันนี้มาบอกไว้ก่อนเพื่อเป็นข้อมูลนะครับ ส่วนจะมีอะไรให้พิสูจน์ต่อก็คอยติดต่อตอนหน้านะครับ

Discussion (0)