Go言語でコマンドラインAA表示
Go言語で予め用意しておいたAAをランダムに表示するプログラム書いてみました。
はっきり言って実用性は皆無です。text/template
を使ってみたかっただけです。
プログラムとテンプレート
// aacreator.go package main import ( "fmt" "io/ioutil" "log" "os" "path/filepath" "strings" "text/template" ) const AARoot = "./aa" type AATemplate struct { AAs []string } func main() { AAFiles, err := ioutil.ReadDir(AARoot) if err != nil { log.Fatal(err) } tpl := template.Must(template.ParseFiles("./aa.tpl")) aas := make([]string, 0) for _, AAFile := range AAFiles { aaBytes, err := ioutil.ReadFile(filepath.Join(AARoot, AAFile.Name())) if err != nil { log.Fatal(err) } aaString := strings.Replace(string(aaBytes), "`", "`+\"+`+\"+`", -1) aas = append(aas, aaString) } aatemplate := AATemplate{aas} aaGoSource, err := os.OpenFile("./aa.go", os.O_WRONLY|os.O_CREATE, 0666) if err != nil { log.Fatal(err) } if err := tpl.Execute(aaGoSource, aatemplate); err != nil { log.Fatal(err) } fmt.Println("Success!") }
// aa.tpl package main import ( "fmt" "math/rand" "time" ) var aas = []string{ {{range $AA := .AAs}} ` {{$AA}} `,{{end}} } func main() { rand.Seed(time.Now().UnixNano()) fmt.Println(aas[rand.Intn(len(aas))]) }
用意するもの
適当なディレクトリにaa
という名のディレクトリを作成し、その直下に表示したいAAを一つ1ファイルで保存しておく。
実行
aacreator.go
とaa.tpl
を先ほど用意したディレクトリに置くgo run aacreator.go
と打つaa.go
というプログラムができていることを確認したら、go run aa.go
と打つ
実行イメージ
$ go run aa.go / ̄ ̄\ / ._ノ ヽ、\ | (●)(●) | ぼくは ただ きみに | (__人__) | . | ` ⌒´ } | } ヽ / / ̄ ̄ ̄\ __ヽ ノ__ / ─ ─ \ さよならを言う練習をする / .ヽ / (●) (●) \ || || . | (__人__) | || ・ ・ || \ ` ⌒´ / || || / | || || (_ ) ・ ・ || (⌒.l⌒ヽ ._ノ | l⌒ヽ _ノ |  ̄| r +`+(;;;U;;;) )__) . | r +`+ (;;;U;;) )__) 15 (_ノ  ̄ / / (_ノ  ̄ / / ( _) ( _) BEGINNING OF THE OF TOMORROW __ (´( ,r―――‐-y .,--, r----y r----, ,-----、 ,r-ァ ,r-y ) ヽ ヽ、`ヽ __ 一7 /'7 } / / / / ̄ .//l l´ / / 7 // /_/ / _ ,r´,r´ ,/ / l ( /  ̄ <´/ / / └‐ァ //_l l / / '--' / _. / )ヽ ヽ ヽ、 / ( ) ヽ, / /'7 / / / ./ / ̄ //~~l .l / /./ ̄// / / ./ ノ ( ) ). ./l ヽ-、`''´ /___ー'_,ノ /__'--ァ/___'--ァ/_/ l_-'_'-'__ノ/__ノ/___'--y__ `~ ,--' lヽ .l ヽ_ノ .7∠ニニニニニニ フ--y〃/ / _ _┬∠ニニニニニニニフ/ ヽ,_ノ/ ヽ,__,,,,,,7∠ニニニニニニフ / / / ̄∠ニニニニニニフ /,,___,ノ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
勿論実行する度結果は変わります。適当にビルドしてPATH
の通った場所にバイナリ放り込めばどこでも癒やされることでしょう。
参考
raw string
の中でバッククオートをエスケープできないのかな…