Golang – Unicode

วันนี้ผมได้ทำโจทย์ข้อนึงจาก CodeSignal ครับ
ให้หา firstDigit ก็คือให้หาเลขตัวแรกจากทางซ้ายครับ

CodeSignal – firstDigital

วิธีของผม

ผมใช้การ map ครับ ( string ของ golang เวลา loop จะได้เป็น rune ครับ )

func firstDigit(inputString string) string {
    mapChar:=map[rune]bool{
        '0':true,
        '1':true,
        '2':true,
        '3':true,
        '4':true,
        '5':true,
        '6':true,
        '7':true,
        '8':true,
        '9':true,
    }
    for _,v := range inputString{
        if mapChar[v]{
            return string(v)
        }
    }
return ""
}

แล้วของคนอื่นๆละเป็นไง?

import "unicode"
func firstDigit(inputString string) string {
     for _, letter := range inputString {
         if(unicode.IsDigit(letter)) {
             return string(letter)
         }
     }
     return ""
}

อันนี้เป็นใช้ unicode ครับ ซึ่งผมว้าวมาก เพราะเพิ่งรู้จักว่า golang มี unicode พอลองไปดู func ก็พบว่า
เห้ยยยย อเมซิ่งแว๊นๆ มีครบให้ทุกอย่าง เป็นอีก 1 package ที่ต้องจำไว้ว่า golang ทำได้

นอกจากนั้นก็มีการแปลง strconv ซึ้งก็คิดไว้แล้วว่ามีแหละ เพราะผมเคยทำแบบนี้

import "strconv"
func firstDigit(inputString string) string {
    val, err := strconv.Atoi(string(inputString[0]))
    if err != nil {
        return firstDigit(inputString[1:])
    }
    return strconv.Itoa(val)
}

สรุป

จากที่สัมผัสกับ Golang มานะครับ ผมเข้าใจละที่ว่าทำไม google ถึงเอาภาษา go มาเป็น ภาษาที่ไว้จัดการ network ภายในของตัวเอง

นั้นก็เพราะ golang มี effective ที่ดีมากๆ และมี standard package ที่จัดการเหมาะผมกับการทำ network, string, time ซึ่งพวกนี้มันเกี่ยวกับการแปลงไปแปลงมาของ string มากครับ เช่น ip “10.123.10.155” เวลาส่งมาเป็น string แต่สุดท้ายก็ต้องมา check เพิ่มว่า ข้างในจะไม่มีวางยาเป็นแบบ “10.12e.l0.155” อะไรแบบนี้นะ และ golang เหมาะมากครับ

ถ้าคุณลองไปดู package golang เพิ่ม คุณจะพบว่ามีอีกหลายๆ package ที่ใช้พวก net/http, net/url, io, encode, os ซึ่งเป็นพื้นฐานที่จะคุยกับ server และ golang ทำออกมาได้ดีมากครับ

แล้ว Golang ไม่เหมาะกับอะไร? ตอนนี้ก็คงบอกว่า พวก machine learning, mathematics ขั้นสูง
พวก IOT ผมก็ยังไม่แน่ใจ เพราะ golang มีโอกาส nil ได้ ซึ่งต่างกับ Rust ที่ต้อง compile ให้ผ่านก่อน