Closed2

TinyGo で drivers の net を使ったコードがビルドエラーになるため、対策をまとめる

ehime-iyokanehime-iyokan

問題点

Go v1.22.6、TinyGo v0.33.0 にしたところ、drivers の netを使うソースコードで、ビルドエラーが発生するようになった。
Go v1.19.0、TinyGo v0.28.0 では、ビルドできていた。

ビルドエラーの原因

詳細

原因について、詳細は理解できていませんが、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
go.mod の 「tinygo.org/x/drivers v0.23.0 // indirect」に対してのエラー文
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)
main.go
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)
	}
}
go.mod
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 を使用するような構成になっているようです。

このスクラップは23日前にクローズされました