Rust再々入門
昨日、すっかり初心者に戻ってしまったので、Rust の最初のステップ - Learn | Microsoft Docsをやってみることにした。
最初のモジュールのまとめに書かれていた、Table of Contents - Rust Cookbookがいろいろ参考になりそう。
POSTS
昨日、すっかり初心者に戻ってしまったので、Rust の最初のステップ - Learn | Microsoft Docsをやってみることにした。
最初のモジュールのまとめに書かれていた、Table of Contents - Rust Cookbookがいろいろ参考になりそう。
go版のリファクタリングも進めたので、またRust版を進めようと思ったら、すっかり構文など忘れてしまっていた。
やっぱり集中&継続して触らないとダメだ。。
細かい変換を関数化してみた。
strconv.Atoi
をエラーだったらデフォルト値で返すやつとか。
titleやtempoを[]byteにして返すやつとか。
mainのテストは、os.Argsを直接設定するという割と無理やりな書き方でテストしていたけれど、処理部分を別関数にしたので、引数を変えて正常系と異常系をテストし分けることができるようになった。
Docker Desktopでは設定でcomposeのバージョン(1系と2系)を切り替えることができる。
ところで、いつまでV1が使えるのか気になったので調べてみた。
https://github.com/docker/compose では、デフォルトのブランチがv2となっている。masterブランチに切り替えてREADME.mdを見ると、
New features and bug fixes will only be considered in the V2 codebase
とあるが、
but as of right now there is no concrete timeline
Read more
Rust版でやっているように、main関数から処理を分離してrun関数を作ってみた。
入力ファイルをos.Args[1]
で取得していたので、引数指定しないと範囲外アクセスでpanicしていた。
flagパッケージ使ってflag.Arg(0)
で取得するようにしたので、引数指定しなかった場合にはファイルなしエラーで終わるようになった。
もっと親切にするなら、エラー終了ではなくヘルプ表示にするのが良いのだろうけど、それはまた余裕があるときにでも。
Read moreEOTとかbyteのスライスをconstで定義しようとしてできなかった。
const EOT = []byte{0x00, 0xFF, 0x2F, 0x00}
$ go run cmd/mdmml/main.go
# github.com/umemak/mdmml
./mdmml.go:10:7: const initializer []byte{...} is not a constant
The Go Programming Language Specification - The Go Programming Language
文字列リテラルが許されるならbyteスライスも許されてもよいではないかと思ったけれど、ダメらしい。 varで我慢する。
MDMMLのループバグ、デバッグが面倒だったのでループの展開だけ前処理に分けることにした。
これだと文字列の状態でテストできるので、16進数より見やすい。
たぶん直ったと思う。