DEV Community

Anuchit Prasertsang
Anuchit Prasertsang

Posted on

อาร์เรย์ golang

อาร์เรย์คืออะไร

ถ้าคิดไม่ออกให้นึกถึงห้องแถวที่เรียงต่อกัน แต่ละห้องคืออาร์เรย์หนึ่งช่องเอาไว้เก็บของหนึ่งชิ้น และเราจะเริ่มนับห้องแรกเป็นตำแหน่งที่ 0 (ไม่ใช่ 1 นะ) ถ้าเรามีห้องแถวสิบห้อง แสดงว่าเรามีตำแหน่งเก็บของตั้งแต่ 0 ถึงตำแหน่งสุดท้ายคือ 9 รวมเป็นสิบตำแหน่ง

การประกาศอาร์เรย์

ตัวแปรอาร์เรย์ในโกใช้วงเล็บก้ามปู [n]type คล้ายในภาษาส่วนใหญ่
แน่นอนว่าตัวแปรอาร์เรย์ต้องระบุขนาด n ด้วยว่าจะให้อาร์เรย์มีขนาดเท่าไร

var langs [3]string    // อาร์เรย์ langs เก็บของเป็น string ขนาด 3 ช่อง
var ages [5]int        // อาร์เรย์ ages เก็บของเป็น int ขนาด 5 ช่อง
Enter fullscreen mode Exit fullscreen mode

ถ้าเรามี type อื่นๆก็สามารถประกาศเป็นอาร์เรย์ได้เหมือนกัน

type User struct {
    Name string
    Age  int
}
Enter fullscreen mode Exit fullscreen mode

ประการอาร์เรย์ของ User

var u [10]User
Enter fullscreen mode Exit fullscreen mode

อาร์เรย์ในโกประกาศแล้วพร้อมใช้งานเลยนะ
อ่านค่าในอาร์เรย์สามารถระบุตำแหน่งที่อยากจะอ่านค่าภายในเครื่องหมาย []
เช่นอยากอ่าน อยากรู้ว่าในห้องแถวห้องแรกเก็บค่าอะไรไว้ (อาร์เรย์ช่องแรก)

var langs [3]string 
n := langs[0]
fmt.Printf("ค่าที่เก็บอยู่ในอาร์เรย์ช่องแรกคือ %q\n", n)
Enter fullscreen mode Exit fullscreen mode

อาร์เรย์ในโกจะทำการใส่ค่าเริ่มต้น (zero value) ให้กับอาร์เรย์ทุกช่องโดยอัตโนมัติจึงทำให้อาร์เรย์พร้อมใช้งาน (ค่าเริ่มต้นของ string คือ "" empty string)

ใส่ค่าหรือเปลี่ยนแปลงค่าในอาร์เรย์

langs[0] = "gopher" // เอาคำว่า "gopher" ไปเก็บในอาร์เรย์ช่องที่หนึ่ง
n := langs[0]       // อ่านค่าจากอาร์เรย์ช่องที่หนึ่ง
fmt.Printf("ค่าที่เก็บอยู่ในอาร์เรย์ช่องแรกคือ %q\n", n)
Enter fullscreen mode Exit fullscreen mode

กำหนดค่าเริ่มต้นตอนประกาศได้ด้วย

โดยใช้เครื่องหมาย = แล้วใส่ค่าที่เราต้องการเข้าไป โดยการใส่ชื่อ type แล้วตามด้วย ปีกกา {} เราสามารถใส่ค่าเข้าไปในปีกกา คั่นด้วย , คอมม่า

var langs [3]string 
langs = [3]string{"gopher", "Pythonistas", "F#"}
Enter fullscreen mode Exit fullscreen mode

หาขนาดของอาร์เรย์

เราสามารถใช้คำสั่ง len เพื่อหาขนาดของอาร์เรย์ได้เช่นกัน

l := len(langs)
fmt.Println("อาร์เรย์ langs มีขนาด", l)
Enter fullscreen mode Exit fullscreen mode

สำคัญ

ในโกขนาดของอาร์เรย์ถือว่าเป็นคุณสมบัติของ type ด้วย
หมายความว่าอาร์เรย์ที่เก็บของชนิดเดียวกันแต่คนละขนาดถือว่าเป็นคนละ type กัน
(ซึ่งทำให้ array ใน โก ปลอดภัยในการใช้งานมากๆ) เช่นถ้าเรามีฟังก์ชั่นชื่อว่า Dubnaew (ดับแนว) รับอาร์เรย์ที่เก็บสตริงขนาด 3

func Dubnaew(ns [3]string) {
    fmt.Println(ns)
}
Enter fullscreen mode Exit fullscreen mode
langs := [3]string{}
Dubnaew(langs)

cords := [5]string{}
Dubnaew(cords) // compile error : cannot use cords (type [5]string) as type [3]string in argument to Dubnaew
Enter fullscreen mode Exit fullscreen mode

โบนัส

ใช้ for loop กับ array ก็ได้นะ

for i := 0; i < len(langs); i++ {  // วนลูปด้วย index (ตำแหน่ง)
      val := langs[i]
      fmt.Println(val)
}
Enter fullscreen mode Exit fullscreen mode
for i, val := range langs {  // วนลูปด้วย for range เอาทั้ง index และ ค่าที่อยู่ใน index นั้น
    fmt.Println(i, val)
}
Enter fullscreen mode Exit fullscreen mode
for _, val := range langs {  // วนลูปด้วย for range เอาแค่ค่าของแต่ละช่อง
    fmt.Println(val)
}
Enter fullscreen mode Exit fullscreen mode
for i := range langs {  // วนลูปด้วย for range เอาแค่ index
      val := langs[i]
      fmt.Println(i, val)
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)