GoにいればGoに従え(26) Goの標準ライブラリも46%くらい?はTinyGoで使える

Joseph Halfmoon

前回はTinyGo専用(組み込みマイコン向けの)ドライバセットTinyGo Driversは便利、便利の回でした。でもねTinyGo専用のドライバばかりでなく便利なものは他にもあるっしょ、肝心なものを忘れてないかい?ということでGo言語の標準ライブラリのTinyGo対応状況を確認してみました。かなり使える?

※「GoにいればGoに従え」Go関連記事の総Index

Go言語の標準ライブラリはTinyGoでも46%くらいは使える

以下のページにTinyGoで使えるGo言語の標準ライブラリのリストが掲げられております。

Packages supported by TinyGo

上記ページへ行ってリストされているパッケージの数を改めて数えてみました(といって表計算ソフトでですが。2023年7月20日現在。)

    1. リストされているライブラリは合計148種
    2. Importableとされているもの127種
    3. 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言語のライブラリの説明ページが以下に。

md5

上記のページのサンプルプログラムは、もろそのままで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書き込み後、シリアルモニタを接続すれば、ほれこのように。

results

勿論、出力結果のMD5ハッシュはサンプルプログラムと一致しております。

GoにいればGoに従え(25) TinyGo Drivers便利。なんでも簡単接続。へ戻る

GoにいればGoに従え(27) container/heapをTinyGoで使ってみる へ進む