Tag: go
49 รายการ
Blog
Go bytes.FieldsSeq: อ่าน token ทีละชิ้นโดยไม่สร้าง slice ก้อนใหญ่
ใช้ bytes.FieldsSeq เดินข้อมูลไบต์แบบ lazy หยุดได้ทันทีเมื่อได้ field ครบ พร้อม Go test ตรวจ whitespace และ early stop
Go maps.EqualFunc: เทียบ config คนละชนิดด้วยกติกาเดียว
ใช้ maps.EqualFunc เทียบค่าจาก config กับ API response โดยกำหนด equality ชัดเจน พร้อม Go test
Go strings.FieldsFuncSeq: แยก token แบบ iterator ไม่ต้องสร้าง slice ทั้งก้อน
ใช้ FieldsFuncSeq เดิน token ทีละค่า หยุดได้เร็ว และคัดลอกเฉพาะข้อมูลที่ต้องเก็บ พร้อม Go test
Go maps.DeleteFunc: ล้างสมาชิกที่ไม่ผ่านเงื่อนไขใน map เดิม
ใช้ maps.DeleteFunc ลบ cache ที่หมดอายุหรือค่าที่ไม่ผ่าน policy พร้อมระวัง nil map, side effect และการแก้ map ระหว่าง callback
Go bytes.Buffer.AvailableBuffer: ต่อข้อมูลลงพื้นที่ว่างโดยลด allocation
ใช้ AvailableBuffer คู่ strconv.Append* อย่างถูกสัญญา พร้อมทดสอบการเขียน CSV, capacity และข้อห้ามเก็บ slice ข้าม Write
Go maps.Collect: สร้าง map จาก iterator คู่ key-value
ใช้ maps.Collect รับ iter.Seq2 เป็น map พร้อมทดสอบ duplicate key, empty input และแยก collection จาก validation
Go slices.AppendSeq: เติม iterator ลง slice โดยไม่ต้องเขียนลูปเอง
ใช้ slices.AppendSeq ต่อค่าจาก iter.Seq ลง slice ที่มีอยู่ พร้อมทดสอบ capacity, iterator แบบใช้ครั้งเดียว และ ownership ของข้อมูล
Go strings.SplitAfterSeq: แบ่งข้อความแบบ iterator โดยเก็บตัวคั่นไว้
ใช้ SplitAfterSeq อ่าน record ทีละส่วนโดยไม่สร้าง slice ทั้งก้อน พร้อมทดสอบ empty separator, single-use iterator และ ownership ของ substring
Go slices.Grow กับ Clip: จองความจุให้พอ แล้วคืนส่วนเกินตรงขอบงาน
ใช้ slices.Grow ลดการขยาย backing array ซ้ำ และ slices.Clip ตัด capacity ก่อนส่งข้อมูลข้าม boundary พร้อม Go tests ที่รันจริง
Go slices.Concat: รวมหลาย slice โดยไม่ผูกผลลัพธ์กับ backing array เดิม
ใช้ slices.Concat รวมข้อมูลหลายก้อน พร้อมทดสอบ aliasing, capacity และกรณีที่ append เดิมอ่านยาก
Go slices.CompactFunc: รวมข้อมูลซ้ำที่ติดกันด้วยกติกาของเรา
ลดข้อมูลซ้ำแบบ adjacent โดยกำหนด equality เอง พร้อมแยกกรณีที่ต้อง sort ก่อนและผลต่อ backing array
Go slices.Backward: วนจากท้ายโดยไม่กลับลำดับข้อมูลต้นฉบับ
ใช้ iterator ย้อนลำดับใน Go เมื่ออยากอ่านจากท้ายไปหน้า โดยไม่ mutate slice และไม่เขียน index loop เอง
Go maps.Insert: เติม map จาก iterator โดยไม่ต้องเขียน loop ซ้ำ
รู้จัก maps.Insert และ iter.Seq2 สำหรับประกอบข้อมูลแบบ pull-free พร้อมขอบเขตเรื่องค่าซ้ำและลำดับ
Go cmp.Or: เลือกค่าตัวแรกที่ไม่เป็น zero value แบบอ่านรู้เรื่อง
ใช้ cmp.Or จัดลำดับค่า config, environment และ fallback โดยไม่ต้องเขียน if ซ้อน พร้อมตัวอย่างที่รันจริง
Go context.WithCancelCause: บอกเหตุผลที่งานถูกยกเลิก
ส่งสาเหตุผ่าน cancellation tree โดยยังรักษา contract ของ context พร้อม go test ที่รันจริง
Go 1.27 portable SIMD: เร่งงานเวกเตอร์โดยไม่ผูก CPU
อ่านข้อเสนอ simd แบบพกพาใน Go 1.27 ตั้งแต่ vector width, tail, emulation ถึงเกณฑ์วัดผลก่อนใช้จริง
Go reflect.TypeAssert: ตรวจชนิดจาก reflect.Value โดยไม่สร้าง interface กลาง
ย้ายจาก Value.Interface().(T) มาใช้ reflect.TypeAssert พร้อมอธิบายกรณีที่แก้ได้และขอบเขตของ reflection
Go unique.Handle: ทำคีย์ซ้ำให้เหลือตัวแทนเดียวก่อนเก็บในแคช
ใช้ unique.Make สร้าง handle ที่เทียบได้เร็ว พร้อมขอบเขตเรื่องอายุข้อมูลและหน่วยความจำ
Go CSV ReuseRecord: อ่านไวขึ้นโดยไม่เก็บ slice ที่ถูกใช้ซ้ำ
ใช้ encoding/csv.Reader.ReuseRecord กับ stream และคัดลอก record ก่อนเก็บข้ามรอบอ่าน
Go 1.27 แยกทางด่วนให้ Allocation ก้อนเล็ก: เร็วขึ้นโดยไม่ต้องแก้โค้ด
เจาะกลไก size-specialized allocation ของ Go 1.27 ว่าทำไมก้อนต่ำกว่า 80 ไบต์เร็วขึ้น และจุดไหนยังควรลด allocation เอง
Go slices.Chunk: แบ่ง batch โดยไม่เปิดช่องให้ append ทับข้อมูลข้างเคียง
ใช้ slices.Chunk เดินข้อมูลเป็น batch แบบ iterator พร้อมเข้าใจ clipped capacity และขอบเขตของ slice ที่แชร์ backing array
Go context.AfterFunc: ผูก cleanup กับการยกเลิกโดยไม่ทิ้ง goroutine รอ
ใช้ context.AfterFunc ปลุกงาน cleanup เมื่อ context ถูกยกเลิก พร้อมเข้าใจ race ของ stop และการรอ callback ให้จบ
Go sync.OnceValue: โหลดค่าครั้งเดียวโดยไม่เปิดช่องให้ cache แข่งกัน
ใช้ sync.OnceValue ทำ lazy initialization ที่ปลอดภัยระหว่าง goroutine พร้อมข้อจำกัดเรื่อง panic และค่าที่ต้อง refresh
Go testing/fstest.MapFS: เทสต์สัญญาไฟล์โดยไม่ต้องสร้าง temp directory
ใช้ MapFS จำลองต้นไม้ไฟล์แบบเล็กและ deterministic พร้อมข้อจำกัดที่ต้องรู้ก่อนแชร์ข้าม goroutine
Go 1.27 bytes.CutLast: แยกส่วนท้ายโดยไม่ Index เอง
ใช้ bytes.CutLast แยก key กับ suffix จาก separator ตัวสุดท้าย พร้อมทดสอบกรณีไม่พบ delimiter และอธิบายเรื่อง slice aliasing
Go 1.27: ใช้ go doc -ex หา executable example ก่อนเดา API
อ่านตัวอย่างที่ผูกกับ package และ symbol จากเครื่องตัวเองด้วย go doc -ex พร้อมวิธีใช้ให้ตรง module version
Go 1.27 จำกัดจำนวนค่า Header ก่อน Request กินทรัพยากรเกินจำเป็น
ตั้ง MaxHeaderValueCount ให้ HTTP server ปฏิเสธ request ที่ส่ง header ซ้ำจำนวนมาก พร้อมข้อควรระวังเรื่อง comma-separated values

JSON ยังจำเป็นไหม? รู้จัก 4 รูปแบบข้อมูลและทดลองด้วย Go
สรุปส่วนเปิดอ่านได้ของบทความ JSON vs binary และเลือกใช้ Protobuf, MessagePack, Avro, FlatBuffers ด้วย Workshop Go ที่วัดผลจริง

Go Serialization 06: HTTP API และ benchmark ที่อ่านผลได้
วัด HTTP throughput และ p50/p95 แยกจาก encode/decode พร้อมผลดิบและค่ากลางจากการทดลอง 5 รอบ

Go Serialization 05: FlatBuffers อ่านตรงหรือ decode ทั้งชุด
แยก direct buffer access ออกจาก full decode เพื่อวัด FlatBuffers โดยเปรียบเทียบงานชนิดเดียวกัน

Go Serialization 04: Avro และต้นทุนของ schema
ใช้ Avro raw binary กับ schema ที่เตรียมครั้งเดียว พร้อมตรวจข้อมูลถูกตัดขาดและข้อจำกัดการเปลี่ยน schema

Go Serialization 03: Protobuf จาก schema ถึง generated code
ออกแบบ wire contract สร้าง Go code และวัดต้นทุน adapter ของ Protobuf อย่างครบถ้วน

Go Serialization 02: ทดลอง MessagePack จาก struct เดิม
เพิ่ม MessagePack adapter ตรวจข้อมูลไทย และอ่านผลขนาดพร้อม gzip โดยไม่เปลี่ยนข้อมูลที่ใช้เทียบ

Go Serialization 01: สร้าง JSON baseline ที่เปรียบเทียบได้
สร้างชุดสินค้าภาษาไทยและตรวจ round-trip ก่อนวัดเวลา ขนาด และ allocations ของ JSON
Go 1.27 ให้ go test จับ API ใหม่เกิน go.mod ด้วย stdversion
ใช้ stdversion vet check ที่มากับ go test เพื่อกันการเผลอเรียก standard library ใหม่กว่าสัญญาเวอร์ชันของโมดูล
เลิก scrape pkg.go.dev: ใช้ API v1 ดึง package, symbol และช่องโหว่แบบระบุ module ชัดๆ
รู้จัก pkg.go.dev API สำหรับ tooling และ AI context พร้อมข้อควรระวังเรื่อง ambiguity, version และ rate limit
Go 1.27.1 ออกแล้ว: แพตช์ cgo, runtime, JSON และ net/http ก่อนขึ้นโปรดักชัน
อ่านขอบเขตแพตช์ Go 1.27.1 แบบทีมปฏิบัติการ พร้อมลำดับทดสอบและ rollout ที่ลดความเสี่ยง
Go 1.27 มี ML-DSA ใน Standard Library: เซ็นข้อมูลให้พร้อมยุค Post-Quantum
ทำความเข้าใจลายเซ็น ML-DSA, context separation และตัวอย่าง sign/verify ที่รันจริงด้วย crypto/mldsa
Workshop Go 1.27: ทดสอบ HTTP ช้าในเวลาจำลอง ไม่ต้องรอจริง
ใช้ httptest.NewTestServer ร่วมกับ testing/synctest สร้างเครือข่ายใน memory และข้ามเวลา 10 วินาทีใน test ที่รันจริง
Go 1.27 หา Goroutine ที่ไม่มีวันตื่นด้วย Leak Profile
รู้จัก goroutineleak profile ที่ใช้ reachability จาก GC แยกงานติดค้างถาวรออกจากงานที่แค่รอนาน พร้อม test ที่รันจริง
Workshop: ย้าย API จาก encoding/json v1 ไป v2 โดยไม่เปลี่ยนสัญญาแบบไม่รู้ตัว
เวิร์กช็อป Go 1.27 แบบลงมือจริง สร้าง characterization tests เปิดโหมดเข้ากันได้ แล้วค่อยเพิ่ม strict contract พร้อมคำสั่ง go test ที่ตรวจแล้ว
Go 1.27 มี package uuid ใน Standard Library: เลือก V4 หรือ V7 ให้ตรงงาน
พี่โชว์พาดู package uuid ใหม่ของ Go 1.27 ความต่างระหว่าง UUID V4 และ V7 พร้อม test เรื่องลำดับและการ parse ที่รันจริง
Go 1.27 เปิด encoding/json/v2: ค่าเริ่มต้นที่เข้มขึ้นเพื่อหยุดข้อมูลกำกวม
พี่โชว์อธิบายว่า JSON v2 ของ Go 1.27 ปิดช่องข้อมูลซ้ำและ UTF-8 ผิดรูปอย่างไร พร้อมตัวอย่าง RejectUnknownMembers ที่รันทดสอบจริง

Go 1.27 เขียน Struct ซ้อนให้น้อยลง: ใช้ Promoted Fields ได้ตั้งแต่ตอนสร้างค่า
พี่โชว์พาดูว่า Go 1.27 ลดความซ้อนของ struct literal อย่างไร พร้อมตัวอย่าง embedded struct สองระดับที่รันทดสอบจริงและข้อจำกัดที่ควรรู้

Go 1.27 มี Generic Methods แล้ว: จัดสายพานแปลงข้อมูลให้อ่านจากซ้ายไปขวา
พี่โชว์พาดูเหตุผลที่ Go 1.27 เพิ่ม type parameter ให้ concrete method พร้อมตัวอย่าง Map ที่รันทดสอบจริง และข้อจำกัดเรื่อง interface ที่ต้องรู้ก่อนออกแบบ API
Beyond Syntax: เขียน Go ให้ Scale กับทีม ไม่ใช่แค่ CPU
รวม 12 แนวคิดที่แยก Go ระดับ "เขียนได้" ออกจาก Go ระดับ "คิดมาแล้ว" — ตั้งแต่ function signature, error handling, interface design, concurrency ownership ไปจนถึง package structure, naming convention, dependency injection และ graceful shutdown ที่ทำให้โค้ดอ่านง่ายขึ้นจริงในระดับทีม
7 Concurrency Patterns ใน Go ที่คุณต้องรู้ — อัปเดต Go 1.25/1.26
รวม 7 รูปแบบ concurrency ที่สำคัญที่สุดใน Go พร้อมตัวอย่างโค้ดที่อัปเดตสำหรับ Go 1.25/1.26 ครอบคลุม Worker Pool, Fan-Out/Fan-In, Pipeline, Pub-Sub, Select Timeout, Semaphore และ Rate Limiting
25 เทคนิค Go ที่นักพัฒนามืออาชีพใช้จริงในงาน Production
รวม 25 เทคนิค Go (Golang) ที่ใช้ได้จริงตั้งแต่ goroutines, channels, context, error handling ไปจนถึง generics, structured logging และฟีเจอร์ใหม่ใน Go 1.25/1.26 พร้อมตัวอย่างโค้ดและ diagram ประกอบทุกหัวข้อ
คู่มือติดตั้ง Go (Golang) ฉบับเข้าใจง่าย
เรียนรู้วิธีติดตั้ง Go (Golang) บน Windows, macOS และ Linux แบบ step-by-step พร้อมตัวอย่างโค้ดและเคล็ดลับสำหรับมือใหม่