Closed9
goでusb接続イベントを拾いたい
基本的にはこれをgoに移植すれば良いんじゃないかという考え
まずmacOS版を考えよう。
libuv使ってる。これ要るのかな。node.js用に作られているみたい。
node-usb-detectionはmacOSの場合はIOKit
, CoreFoundation
使ってるだけっぽい。libuvは使わなくても良い。贅沢言わずにcgoで頑張る方が早そう。そして、cgoは使ったこと無い。
cgoをmacOSで使った例として、これを参考にしてみる。
上の例のソースコードtacogips/mac_switch_watchはgithubに公開されてる。C言語部分がコメント内にかかれているので、vscodeの機能が効かなくてつらい。外部ファイル化の方法を調べよう。
C言語の関数を呼び出すところは、使う関数のヘッダファイルを次のように書く。
cgo darwin ...
のようにdrawin
を書くとmacOSのときだけの処理になる。
//#cgo darwin LDFLAGS: -framework IOKit -framework CoreFoundation
//#include "header.h"
import "C"
C言語はとりあえずプロジェクトルートにあるとgo build
で一緒にビルドしてリンクしてくれるみたい。さらにxxx_darwin.c
とかxxx_linux.c
とかxxx_windows.c
のような名前にするとmacOSのときだけビルドするようになる。
macOSは接続イベントは拾えるようになったので、windowsをC++で試行錯誤中(元々見本がC++なので)。
windowsでもイベント拾えるようになった。結論としてはlibuv
は要らない。
このスクラップは2021/05/16にクローズされました