TinyGo で drivers の net を使ったコードがビルドエラーになるため、対策をまとめる
問題点
Go v1.22.6、TinyGo v0.33.0 にしたところ、drivers の netを使うソースコードで、ビルドエラーが発生するようになった。
Go v1.19.0、TinyGo v0.28.0 では、ビルドできていた。
ビルドエラーの原因
- 原因
- TinyGo の net package が改善されているため
- 対策
- 下記に記載しているコードを元に、改めてコードを作成する
詳細
原因について、詳細は理解できていませんが、TinyGo に詳しい方に相談したところ、「最近 net package 付近が改善されているためであり、改めてリンクのコードをベースに再スタートするのが良いです。Wio Terminal の設定等も自動で行ってくれます。https://github.com/tinygo-org/drivers/blob/release/examples/net/http-get/main.go 」 とのことでした。
調べたこと
ここからは僕が調べたことと考えた内容です。
作成したソースコードとエラーの内容は以下。
- 環境
- OS : Windows 11
- Golang : v1.22.6
- TinyGo : v0.33.0
error while importing tinygo.org/x/drivers/net/http: package net/http/httptrace is not in std (C:\ユーザー名\AppData\Local\tinygo\goroot-735a7af6b5269abed7cd758327e230357e54f7a3e312d061f95ea5cdbd42d764\src\net\http\httptrace)
package main
import (
"fmt"
"time"
"github.com/sago35/tinygo-examples/wioterminal/initialize"
)
var (
ssid string
password string
)
func main() {
_, err := initialize.Wifi(ssid, password, 10*time.Second)
if err != nil {
fmt.Printf("%s\n", err)
time.Sleep(5 * time.Second)
}
}
module main
go 1.22.6
require github.com/sago35/tinygo-examples v0.2.0
require (
golang.org/x/net v0.0.0-20210614182718-04defd469f4e // indirect
golang.org/x/text v0.3.7 // indirect
tinygo.org/x/drivers v0.23.0 // indirect
)
go.mod の「tinygo.org/x/drivers v0.23.0 // indirect」に対して、package net/http/httptrace is not in std
というエラーが出ており、goroot を見てみると確かに net/http/httptrace がありませんでした。今まではエラーにならずにビルドできていたのですが・・・。また、Go, TinyGo の古いバージョンを再インストールしましたが、同様のエラーが発生しました。
とりあえずは、あまり調べすぎても作業が進まないので、調査は保留。
また、「net package 付近が改善されている」ということについては TinyGo v0.31.0 より、
net: replace entire net package with a new one based on the netdev driver
と記載されている通り、 net → netdev, netlink を使用するような構成になっているようです。
細かい原因解明には至っていませんが、解決策は分かったため、一旦closeする。