Go by Example မြန်မာဘာသာ: Line Filters

line filter ဆိုတာ stdin ကနေ input ကိုဖတ်ပြီး၊ process လုပ်ကာ ရလဒ်ကို stdout ပေါ်မှာ print ထုတ်တဲ့ ပုံစံမျိုးဖြစ်ပါတယ်။ grep နဲ့ sed တို့က အသုံးများတဲ့ line filter တွေဖြစ်ပါတယ်။

ဒီနေရာမှာ Go နဲ့ရေးထားတဲ့ line filter နမူနာတစ်ခုပြထားပါတယ်။ ဒီ code က input text အားလုံးကို စာလုံးအကြီးပြောင်းပြီး ရေးထုတ်ပေးပါတယ်။ ဒီပုံစံကိုသုံးပြီး သင့်ရဲ့ကိုယ်ပိုင် Go line filter တွေရေးနိုင်ပါတယ်။

package main
import (
    "bufio"
    "fmt"
    "os"
    "strings"
)

Buffering မလုပ်ထားတဲ့ os.Stdin ကို buffered scanner နဲ့ wrap လုပ်ထားတာက အဆင်ပြေတဲ့ Scan method ကိုပေးပါတယ်။ ဒီ method က scanner ကို နောက် token ဆီရွှေ့ပေးပါတယ်။ ပုံမှန်အားဖြင့် နောက် line ဆီကိုရွှေ့ပေးတာပါ။

func main() {

Text() က လက်ရှိ token ကိုပြန်ပေးပါတယ်။ ဒီနေရာမှာတော့ နောက် line ကိုပြန်ပေးတာဖြစ်ပါတယ်။

    scanner := bufio.NewScanner(os.Stdin)
    for scanner.Scan() {

စာလုံးအကြီးပြောင်းထားတဲ့ line ကို ရေးထုတ်ပါတယ်။

        ucl := strings.ToUpper(scanner.Text())

Scan လုပ်နေစဉ် error ဖြစ်မဖြစ်စစ်ပါတယ်။ file အဆုံးရောက်တာကို Scan က error အဖြစ်မသတ်မှတ်ပါဘူး။

        fmt.Println(ucl)
    }
    if err := scanner.Err(); err != nil {
        fmt.Fprintln(os.Stderr, "error:", err)
        os.Exit(1)
    }
}

ကျွန်ုပ်တို့ရဲ့ line filter ကို စမ်းသပ်ရန်၊ ပထမဆုံး စာလုံးအသေး အနည်းငယ်ပါသည့် ဖိုင်တစ်ခုကို ဖန်တီးပါမယ်။

$ echo 'hello'   > /tmp/lines
$ echo 'filter' >> /tmp/lines

ထို့နောက် line filter ကို အသုံးပြု၍ စာလုံးအကြီးများ ရယူပါမယ်။

$ cat /tmp/lines | go run line-filters.go
HELLO
FILTER

နောက်ဥပမာ: File Paths.