[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"academy-blogs-th-1-1-all-go-error-handling-unit-testing-all--*":3,"academy-blog-translations-yrttgxihyj8vun5":114},{"data":4,"page":102,"perPage":102,"totalItems":102,"totalPages":102},[5],{"alt":6,"collectionId":7,"collectionName":8,"content":9,"cover_image":10,"cover_image_path":11,"created":12,"created_by":13,"expand":14,"id":108,"keywords":109,"locale":84,"published_at":110,"scheduled_at":13,"school_blog":106,"short_description":111,"slug":112,"status":104,"title":6,"updated":113,"updated_by":13,"views":107},"Ep.16  Go กับ Error Handling & Unit Testing - จัดการข้อผิดพลาดและทดสอบโค้ด","sclblg987654321","school_blog_translations","\u003Cp class=\"p1\">\u003Cstrong>&nbsp;Go กับ Error Handling &amp; Unit Testing - จัดการข้อผิดพลาดและทดสอบโค้ด!&nbsp;\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp class=\"p2\">&nbsp;\u003C\u002Fp>\u003Cp class=\"p3\">ข้อผิดพลาดเป็นส่วนหนึ่งของการเขียนโปรแกรมที่หลีกเลี่ยงไม่ได้ และใน Go เรามีวิธีจัดการอย่างเป็นระบบ เพื่อให้โค้ดทำงานได้ถูกต้องและเสถียร!&nbsp;\u003C\u002Fp>\u003Cp class=\"p2\">&nbsp;\u003C\u002Fp>\u003Cp class=\"p3\">\u003Cstrong>Error Handling คืออะไร?\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp class=\"p3\">การจัดการข้อผิดพลาดใน Go เน้นการตรวจสอบและจัดการปัญหาที่อาจเกิดขึ้นระหว่างการทำงานของโปรแกรม เช่น การเชื่อมต่อฐานข้อมูลไม่สำเร็จ ไฟล์ที่หาไม่พบ หรือการคำนวณที่ผิดพลาด\u003C\u002Fp>\u003Cp class=\"p3\">ตัวอย่าง Error Handling ใน Go\u003C\u002Fp>\u003Cp class=\"p3\">ใน Go เรามักจะคืนค่า error ในฟังก์ชันเพื่อให้เช็คว่ามีข้อผิดพลาดเกิดขึ้นหรือไม่ในโค้ดนี้:\u003C\u002Fp>\u003Cp class=\"p3\">ฟังก์ชัน\u003Ci> divide \u003C\u002Fi>ตรวจสอบว่า\u003Ci> b \u003C\u002Fi>เป็น\u003Ci> 0 \u003C\u002Fi>หรือไม่\u003Ci> \u003C\u002Fi>หากเป็น\u003Ci> 0 \u003C\u002Fi>จะส่งคืนข้อผิดพลาด\u003C\u002Fp>\u003Cp class=\"p3\">เราใช้\u003Ci> if err != nil \u003C\u002Fi>เพื่อตรวจสอบข้อผิดพลาดก่อนที่จะใช้ผลลัพธ์\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-plaintext\">package main\r\n\r\nimport (\r\n    \"errors\"\r\n    \"fmt\"\r\n)\r\n\r\nfunc divide(a, b int) (int, error) {\r\n    if b == 0 {\r\n        return 0, errors.New(\"cannot divide by zero\")\r\n    }\r\n    return a \u002F b, nil\r\n}\r\n\r\nfunc main() {\r\n    result, err := divide(10, 0)\r\n    if err != nil {\r\n        fmt.Println(\"Error:\", err)\r\n        return\r\n    }\r\n    fmt.Println(\"Result:\", result)\r\n}\r\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp class=\"p3\">\u003Cstrong>สร้าง Custom Error แบบง่ายๆ\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp class=\"p3\">นอกจากข้อผิดพลาดทั่วไป เรายังสามารถสร้างข้อผิดพลาดเฉพาะของเราเองได้\u003C\u002Fp>\u003Cp class=\"p3\">โดยใช้ ErrInvalidInput ทำให้เราแยกข้อผิดพลาดแต่ละแบบได้ชัดเจนขึ้น\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-plaintext\">var ErrInvalidInput = errors.New(\"invalid input provided\")\r\n\r\nfunc checkInput(input int) error {\r\n    if input &lt; 0 {\r\n        return ErrInvalidInput\r\n    }\r\n    return nil\r\n}\r\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp class=\"p3\">\u003Cstrong>การทำ Unit Testing ใน Go\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp class=\"p3\">Unit Testing เป็นการทดสอบส่วนย่อยๆ ของโปรแกรมเพื่อให้แน่ใจว่าทำงานได้ถูกต้องตามที่คาดหวัง ใน Go เรามีแพ็กเกจ testing สำหรับเขียนเทสท์\u003C\u002Fp>\u003Cp class=\"p3\">ตัวอย่างการทดสอบฟังก์ชัน add ในโค้ดนี้:\u003C\u002Fp>\u003Cp class=\"p3\">\u003Ci>TestAdd \u003C\u002Fi>คือฟังก์ชันทดสอบที่ใช้\u003Ci> t *testing.T \u003C\u002Fi>สำหรับการทดสอบ\u003C\u002Fp>\u003Cp class=\"p3\">\u003Ci>t.Errorf \u003C\u002Fi>ใช้แสดงข้อผิดพลาดหากผลลัพธ์ไม่ตรงกับที่คาดหวัง\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-plaintext\">package main\r\n\r\nimport \"testing\"\r\n\r\nfunc add(a, b int) int {\r\n    return a + b\r\n}\r\n\r\nfunc TestAdd(t *testing.T) {\r\n    result := add(2, 3)\r\n    if result != 5 {\r\n        t.Errorf(\"Expected 5, got %d\", result)\r\n    }\r\n}\r\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp class=\"p3\">\u003Cstrong>Table-Driven Tests - การทดสอบหลายกรณีในครั้งเดียว\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp class=\"p3\">Table-Driven Tests คือเทคนิคที่ช่วยให้เราทดสอบหลายกรณีในฟังก์ชันเดียวได้อย่างมีประสิทธิภาพ\u003C\u002Fp>\u003Cp class=\"p3\">ในโค้ดนี้:\u003C\u002Fp>\u003Cp class=\"p3\">เราสร้าง\u003Ci> Table \u003C\u002Fi>ที่มีกรณีทดสอบต่างๆ\u003Ci> \u003C\u002Fi>แล้วใช้\u003Ci> for \u003C\u002Fi>วนรันเทสท์ในแต่ละกรณี\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-plaintext\">func TestAddCases(t *testing.T) {\r\n    cases := []struct {\r\n        a, b, expected int\r\n    }{\r\n        {1, 2, 3},\r\n        {2, 3, 5},\r\n        {0, 0, 0},\r\n    }\r\n\r\n    for _, c := range cases {\r\n        result := add(c.a, c.b)\r\n        if result != c.expected {\r\n            t.Errorf(\"Expected %d, got %d\", c.expected, result)\r\n        }\r\n    }\r\n}\r\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp class=\"p3\">\u003Cstrong>การรัน Unit Tests ใน Go\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp class=\"p3\">ใช้คำสั่ง go test เพื่อรันการทดสอบ:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-plaintext\">go test\r\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>&nbsp;\u003C\u002Fp>\u003Cp class=\"p3\">\u003Cstrong>สรุปง่ายๆ\u003C\u002Fstrong>\u003C\u002Fp>\u003Cul class=\"ul1\">\u003Cli class=\"li3\">ใช้ error ในฟังก์ชันเพื่อตรวจสอบข้อผิดพลาด\u003C\u002Fli>\u003Cli class=\"li3\">ใช้ testing สำหรับการทดสอบฟังก์ชัน\u003C\u002Fli>\u003Cli class=\"li4\">ใช้\u003Cspan class=\"s2\"> Table-Driven Tests \u003C\u002Fspan>เพื่อทดสอบหลายกรณีในครั้งเดียว\u003C\u002Fli>\u003C\u002Ful>","13lcrk8lu4o_u9puo6mc74.jpg","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclblg987654321\u002F2j5frph3kviu2sl\u002F13lcrk8lu4o_u9puo6mc74.jpg","2026-03-04 08:34:37.968Z","",{"keywords":15,"locale":78,"school_blog":88},[16,23,28,33,38,43,48,53,58,63,68,73],{"collectionId":17,"collectionName":18,"created":19,"created_by":13,"id":20,"name":21,"updated":22,"updated_by":13},"sclkey987654321","school_keywords","2026-03-04 08:24:43.639Z","mjcndls2y3h9ob6","Error Handling","2026-04-10 16:07:29.897Z",{"collectionId":17,"collectionName":18,"created":24,"created_by":13,"id":25,"name":26,"updated":27,"updated_by":13},"2026-03-04 08:33:54.199Z","tcmhcek6qmvgjns","Unit Testing","2026-04-10 16:08:03.006Z",{"collectionId":17,"collectionName":18,"created":29,"created_by":13,"id":30,"name":31,"updated":32,"updated_by":13},"2026-03-04 08:33:57.712Z","z6rhic75w1tdqh9","Table-Driven Tests","2026-04-10 16:08:04.322Z",{"collectionId":17,"collectionName":18,"created":34,"created_by":13,"id":35,"name":36,"updated":37,"updated_by":13},"2026-03-04 08:32:45.519Z","dhpyn9byool9daz","การจัดการข้อผิดพลาด","2026-04-10 16:07:59.648Z",{"collectionId":17,"collectionName":18,"created":39,"created_by":13,"id":40,"name":41,"updated":42,"updated_by":13},"2026-03-04 08:20:14.253Z","ah6lvy4x8qe08l5","Golang","2026-04-10 16:07:26.172Z",{"collectionId":17,"collectionName":18,"created":44,"created_by":13,"id":45,"name":46,"updated":47,"updated_by":13},"2026-03-04 08:26:59.195Z","gab60xd583s3qaw","Superdev School","2026-04-10 16:07:37.087Z",{"collectionId":17,"collectionName":18,"created":49,"created_by":13,"id":50,"name":51,"updated":52,"updated_by":13},"2026-03-04 08:26:56.612Z","yf74wkqyamfc5qx","โปรแกรมเมอร์","2026-04-10 16:07:36.426Z",{"collectionId":17,"collectionName":18,"created":54,"created_by":13,"id":55,"name":56,"updated":57,"updated_by":13},"2026-03-04 08:32:27.645Z","vfe4f15x4b3afpm","การศึกษาการเขียนโปรแกรม","2026-04-10 16:07:54.538Z",{"collectionId":17,"collectionName":18,"created":59,"created_by":13,"id":60,"name":61,"updated":62,"updated_by":13},"2026-03-04 08:20:37.794Z","x2c5z8w1cr41ij3","ภาษาโปรแกรมมิ่ง","2026-04-10 16:07:27.917Z",{"collectionId":17,"collectionName":18,"created":64,"created_by":13,"id":65,"name":66,"updated":67,"updated_by":13},"2026-03-04 08:31:53.015Z","801w5t09mfaa9hl","ภาษาโปรแกรม","2026-04-10 16:07:46.625Z",{"collectionId":17,"collectionName":18,"created":69,"created_by":13,"id":70,"name":71,"updated":72,"updated_by":13},"2026-03-04 08:32:27.254Z","xl8ixz1jmfnab5f","ฝึกเขียนโปรแกรม","2026-04-10 16:07:54.377Z",{"collectionId":17,"collectionName":18,"created":74,"created_by":13,"id":75,"name":76,"updated":77,"updated_by":13},"2026-03-04 08:31:30.863Z","oyltq82epf0vqka","การเขียนโปรแกรม","2026-04-10 16:07:41.883Z",{"code":79,"collectionId":80,"collectionName":81,"created":82,"flag":83,"id":84,"is_default":85,"label":86,"updated":87},"th","pbc_1989393366","locales","2026-01-22 10:59:55.832Z","twemoji:flag-thailand","s8wri3bt4vgg2ji",true,"Thai","2026-04-10 15:42:46.614Z",{"category":89,"collectionId":90,"collectionName":91,"expand":92,"id":106,"views":107},"wqxt7ag2gn7xcmk","pbc_2105096300","school_blogs",{"category":93},{"blogIds":94,"collectionId":95,"collectionName":96,"created":97,"created_by":13,"id":89,"image":98,"image_alt":13,"image_path":99,"label":100,"name":101,"priority":102,"publish_at":103,"scheduled_at":13,"status":104,"updated":105,"updated_by":13},[],"sclcatblg987654321","school_category_blogs","2026-03-04 08:33:53.210Z","59ty92ns80w_15oc1implw.png","https:\u002F\u002Ftwsme-r2.tumwebsme.com\u002Fsclcatblg987654321\u002Fwqxt7ag2gn7xcmk\u002F59ty92ns80w_15oc1implw.png",{"en":101,"th":101},"Golang The Series",1,"2026-03-16 04:39:38.440Z","published","2026-04-25 02:32:15.470Z","yrttgxihyj8vun5",368,"2j5frph3kviu2sl",[20,25,30,35,40,45,50,55,60,65,70,75],"2025-01-27 04:36:42.896Z","เรียนรู้วิธีจัดการข้อผิดพลาดและทดสอบโค้ดใน Go ด้วยเทคนิคการจัดการข้อผิดพลาดที่มีประสิทธิภาพและการทดสอบแบบ Table-Driven","go-error-handling-unit-testing","2026-04-25 02:47:34.311Z",{"th":112}]