DEV Community

Anuchit Prasertsang
Anuchit Prasertsang

Posted on

3 2

อาร์เรย์ 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

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay