มาเขียน fsm ด้วย GO กันเถอะ

Chanita Prasoppanich
1 min readSep 9, 2018

--

สวัสดีค่ะ วันนี้เราจะมาแชร์ เรื่องการเขียน state ด้วย go fsm ค่ะ

เริ่มจาก package ที่ใช้เลย ซึ่งก็คือ “github.com/looplab/fsm”

ตัวอย่าง

Example Finite State Machine (https://codereview.stackexchange.com/questions/143726/event-driven-finite-state-machine-dsl-in-kotlin)

1. Define States and Events

ก่อนอื่นเมื่อเราได้ diagram ของ fsm ที่เราต้องการมาแล้ว เราต้องมากำหนด state ที่ต้องการกันก่อน

อย่างในตัวอย่างจะมี state คือ idle , going up , going down ,at top และ at bottom

หลังจากนั้นก็มากำหนด event ที่มี คือ go up , go down , halt , top limit hit และ bottom limit hit

2. Coding

เราจะเริ่มที่การ code ในส่วนการทำงานหลักเลย ส่วนเรื่องการประกาศตัวแปรศึกษาเพิ่มเติมที่ pakage ได้เลยค่ะ

สร้าง function ง่ายๆที่รับค่า state เริ่มต้นและ callback เข้ามา

ส่วนของการทำงานข้างในจะเริ่มเขียนด้วย pattern ของ package ส่วน events จะนำ events ทั้งหมดที่เป็นไปได้ใน fsm นี้มา

function จะเริ่มทำการเปลี่ยน state เมื่อมี event เข้ามา

ยกตัวอย่าง เมื่อใส่ state idle เข้าไปเป็น start state แล้ว ถ้ามี event go-up จะเปลี่ยน state ไปเป็น going-up

หรือ event go-down จะเปลี่ยนไปเป็น going-down

หรือถ้าเป็น event halt, top-limit-hit และ bottom-limit-hit จะไม่เปลี่ยนเป็น state อื่น

3. Testing

เพิ่มเติม ในส่วนของ callback นั้นจะมีหลายคำสั่ง เช่น

enter_<state> : ก่อนเข้า state อยากให้ทำอะไรบางอย่าง

leave_<state> : หลังจบ state อยากให้ทำอะไรบางอย่าง

และอื่นๆศึกษาเพิ่มเติมได้ที่ package นะคะ

ขอบคุณที่เข้ามาอ่านนะคะ ถ้าผิดพลาดก็ขออภัยด้วยนะคะ 🙏🏻

--

--