มาลองสร้าง forEach แบบ js

วันนี้ได้แนวคิดจาก @iporsut เรื่อง forEach แบบ js สามารถทำใน go ได้ เลยมาลองเขียนดูเล่นๆ

ดูตัวอย่างกันเลยครับ

 

package main

import (
	"fmt"
)

type slice []int
type loopFn func(int)

func (a *slice) forEach(fn loopFn) {
	for _, e := range *a {
		fn(e)
	}
}

func main() {
	a := slice{
		1, 2, 3, 4, 5, 6, 7, 8, 9,
	}
	a.forEach(func(i int) {
		fmt.Println(i)
	})
}

 

 

https://gist.github.com/pallat/ddb16ee92c33b24a8283

 

วิธีการคือ ขั้นแรก สร้าง type ใหม่ ที่ชื่อว่า slice เป็น slice ครับ เนื่องจากไม่ได้กำหนดขนาด

จากนั้นให้สร้าง method ชื่อ forEach ที่รับ parameter เป็นฟังก์ชัน เราเลยต้องสร้าง type loopFn ขึ้นมา

เพื่อทำอะไรบางอย่างในขณะที่วนลูป โดยผมกำหนดให้มันรับ int ซึ่งเป็น type เดียวกับสมาชิกใน slice ครับ

เวลาใช้งานจริงก็สร้าง slice ขึ้นมาแล้วเรียก forEach แล้วใส่ function ลงไป โดยผมแค่ print ค่ามันออกมาเฉยๆครับ

ทดลองเล่นกันดูได้ที่ http://play.golang.org/p/wfYxUr7oBj