前回はTinyGo専用(組み込みマイコン向けの)ドライバセットTinyGo Driversは便利、便利の回でした。でもねTinyGo専用のドライバばかりでなく便利なものは他にもあるっしょ、肝心なものを忘れてないかい?ということでGo言語の標準ライブラリのTinyGo対応状況を確認してみました。かなり使える?
※「GoにいればGoに従え」Go関連記事の総Index
Go言語の標準ライブラリはTinyGoでも46%くらいは使える
以下のページにTinyGoで使えるGo言語の標準ライブラリのリストが掲げられております。
上記ページへ行ってリストされているパッケージの数を改めて数えてみました(といって表計算ソフトでですが。2023年7月20日現在。)
-
- リストされているライブラリは合計148種
- Importableとされているもの127種
- Passes testsとされているもの68種
合計148種のライブラリが並んでいて、importableは127種あるので、だいたい86%くらいのライブラリは TinyGo用のソースでも、import可能だということです。しかし、テストまでパスしているものは全体の約46%、68種にとどまります。半分近くは安心して使える、のこり40%くらいは怪しい、ということでしょう。
しかし、TinyGoでも、いつもお世話になっている fmt ライブラリ、 importable ですが Passes tests=no でした。その「怪しい」奴をバンバン使ってるじゃん。。。使える範囲かどうかは自己責任で確かめろってことですかい?
TinyGoからcrypto/md5ライブラリを使ってみる
さて、「安心して使える」標準ライブラリのリストを眺めただけではイマイチなので、crypto/md5 ライブラリを使ってみました。「伝統の(古色蒼然?ともいう)」MD5ハッシュを計算してくれるもの。勿論、Passes tests=yes です。つい最近、別シリーズ記事で取り上げさせていただいた余波デス。
ソフトな忘却力(34) MD5ハッシュを計算してみる、OpenSSL
なお、Go言語のライブラリの説明ページが以下に。
上記のページのサンプルプログラムは、もろそのままでTinyGoでもビルドして実行可能でした。流石です。
今回使用した実験プログラムのソースはサンプルプログラムのチョイ直しです。マイコン上での実行なので、何度も繰り返し同じ計算をして答えを表示しています。
package main import ( "crypto/md5" "fmt" "time" ) func main() { var count int32 = 1 for { fmt.Printf("%d : ", count) data := []byte("These pretzels are making me thirsty.") fmt.Printf("%x \n", md5.Sum(data)) time.Sleep(time.Millisecond * 1000) count++ } }
ビルドして実行
ターゲットマシンは例によって BBC micro:bit v2機です。USBで接続し、いつものとおり、以下でビルドしてFlash書き込みです。
$ tinygo flash --target microbit-v2
Flash書き込み後、シリアルモニタを接続すれば、ほれこのように。
勿論、出力結果のMD5ハッシュはサンプルプログラムと一致しております。