DEV Community

Pallat Anchaleechamaikorn
Pallat Anchaleechamaikorn

Posted on

ภารกิจ Tour of Go ภาษาไทย

การแปล Tour of Go เป็นภาษาไทย มีความท้าทายอยู่หลายเรื่อง ถ้าจะนับตั้งแต่ครั้งแรกที่คิดจะทำ

  1. แปลให้อ่านรู้เรื่อง
  2. เอาไป merge กับชาวโลก
  3. deploy เข้า app engine

ใน 3 เรื่องนี้ ทุกวันนี้ข้อ 3 ยังวนเวียนมาสร้างความเวียนหัวให้ผมอยู่เรื่อยๆ โดยเฉพาะ 2ปีหลังมานี้ เพราะว่า Go เองก็มีการเปลี่ยนแปลงหลายๆเรื่อง ไม่ว่าจะเป็นการเปลี่ยน Theme ของ website ทั้งหมด และตัว source code ที่เก็บ Tour เองก็มีการเปลี่ยนแปลงอีกหลายอย่าง เช่น ย้าย repo ไปที่ใหม่ ไปจนถึงเปลี่ยนแปลงโครงสร้างของ code ไปยันวิธีการ deploy ก็เปลี่ยน และล่าสุดการมาของ Generics นอกจากจะเพิ่มเนื้อหาเข้าไปแล้ว ก็ยังมีเปลี่ยนโครงสร้าง code ไปอีกไกลมาก

วันนี้ก็เลยต้องมาบันทึกการแก้ไขเอาไว้ เพราะผมก็เหนื่อยเหมือนกัน 😅 ที่ต้องมา hack มันใหม่ทุกรอบ

ซึ่งก่อนหน้านี้ก็ยังแอบภูมิใจอยู่ว่า เราเป็น Tour ภาษาเดียวที่ไม่นับต้นฉบับ ที่สามารถใช้ Theme เดียวกับต้นฉบับได้อยู่ระยะหนึ่ง เหตุก็เพราะว่า มันต้อง hack และคงไม่ค่อยมีใครมาเสียเวลาอะไรแบบนี้เหมือนผม 🤣

เอาละ มาเริ่มกันเลยว่า ปัญหาการ deploy มันมีอะไรต้องทำบ้าง

1 คำสั่งที่จะใช้ run เฉพาะ Tour

เนื่องจากการเปลี่ยนแปลงครั้งใหญ่ก่อนหน้านี้อย่างหนึ่ง คือการรวบรวมเอา web site ที่เป็น official ของ Go เข้ามาไว้ด้วยกันที่ repo ใหม่ https://github.com/golang/website
ตัว repo นี้เวลาที่เรา run command มันจะได้ web site ทั้งหมดของ Go โดย Tour จะเป็น path หนึ่งของเขาคือ /tour อีกที

ข้อนี้เป็นปัญหาแรก เพราะเราจะเอาเฉพาะ Tour มา deploy ใน App Engine ของเรา แบบอยากให้เข้ามาแล้วเจอ Tour เลยตั้งแต่หน้าแรก ข้อนี้ผมก็เลยต้องไปตามหาคำสั่งที่ต้องการให้เจอ ซึ่งก็ไม่ได้ยากมาก

จากปกติต้องใช้คำสั่ง

go run ./cmd/golangorg
Enter fullscreen mode Exit fullscreen mode

ตามคู่มือในหน้า README แต่ถ้าไปดูที่ dir /tour เองมันก็มีไฟล์ main.go อยู่เหมือนกัน และมันก็สามารถไป go run main.go ในนั้นตรงเลยก็ได้ แล้วมันก็เปิดอ่านใน local เครื่องเราเองได้เลย อันนี้ก็ถือว่าหาเจอแล้ว

2 เมื่อเจอแล้วจะ deploy ไปที่ App Engine ยังไง

ข้อนี้เราเลยต้องเพิ่มไฟล์ app.yaml ลงไปใน /tour เอง ซึ่งโชคดีที่มั่วไปมั่วมาก็ได้ท่าง่ายสุดๆเลย

runtime: go116
main: ./tour

handlers:
  - url: /.*
    script: auto
    secure: always
Enter fullscreen mode Exit fullscreen mode

ถึงจุดนี้ เราสามารถเอา Tour ขึ้น GAE ได้แล้ว แต่ก็ยังติดอีกปัญหาใหญ่คือ ทุกๆหน้าของ Tour จะไม่สามารถกด Run โปรแกรมตัวอย่างได้เลย ซึ่งข้อนี้นำมาซึ่ง ปัญหาที่ 3

3 แก้เรื่อง Run โปรแกรม

ข้อนี้ผมแก้ด้วยการไปเพิ่ม ของในไฟล์ internal/proxy/proxy.go

func RegisterHandlers(mux *http.ServeMux) {
    for _, host := range []string{"golang.org", "go.dev/_", "golang.google.cn", "go-tour-th.appspot.com/_"} {
        mux.HandleFunc(host+"/compile", compile)
        if host != "golang.google.cn" {
            mux.HandleFunc(host+"/share", share)
        }
        mux.HandleFunc(host+"/fmt", fmtHandler)
    }
}
Enter fullscreen mode Exit fullscreen mode

โดยเติม host ของภาษาไทยลงไปดื้อๆเลย "go-tour-th.appspot.com/_" ค่านี้นะครับ

จากนั้นก็ไปเพิ่ม code อีกจุดใน internal/tour/local.go

proxy.RegisterHandlers(mux)
Enter fullscreen mode Exit fullscreen mode

ผมเดาว่านี่คือบทสรุปหลังจากที่มั่วไปหลายอย่าง และถ้าให้กลับมาทำใหม่อีกทีก็จะงงว่าทำไปได้ไง เอาเป็นว่า โคตรมั่วเลยละกันครับ

ผมเขียนสิ่งนี้ไว้บอกตัวเองในอนาคตว่าต้องไปทำอะไรบ้าง ถ้าเผื่อดันไปเผลอลบ repo ซะก่อน

Top comments (0)