syscall は deprecated だったのかー

syscall - The Go Programming Language

Deprecated: this package is locked down. Callers should use the corresponding package in the golang.org/x/sys repository instead.

(雑な訳)非推奨:このパッケージ(syscall)は凍結(?)しとります。ユーザはかわりに golang.org/x/sys のレポジトリのうち、対応するパッケージを使うべき

マジすか!では、golang.org/x/sys/windows を見てみよう。

windows - GoDoc

The primary use of this package is inside other packages that provide a more portable interface to the system, such as "os", "time" and "net". Use those packages rather than this one if you can.

(雑な訳)このパッケージが主に使われているのは、"os""time""net"といった、システムに対してより移植性の高いインターフェイスを提供する他のパッケージの内部だ。もし可能なら、これを使うよりはそういった(汎用の)パッケージを使うべきだ。

Ok!完全に理解した(まったくわかっていない)


というわけで golang.org/x/sys/windows のマニュアルを眺めているが、自前で NewProc しなくても、あらかじめいろんな WindowsAPI が関数化されているのでいいな、これ。

たとえば、windows.GetConsoleScreenBufferInfoはコンソールバッファの情報を得る API だが、構造体(windows.ConsoleScreenBufferInfo)やハンドル(windows.Stdout/windows.Stderr)まで全部定義済みなり。

一方で、文字コード変換には MultiByteToWideChar (ANSIUnicode変換)はあるが、逆がない。あくまで golang のライブラリで使われているもの限定なので、網羅性はカオスのようだ。

また、文字列パラメータも、string ではなく、*uint16 になっているので、そのまま素で使うのはしんどい。*uint16string に変換するラッパーが作らんとね。

以上(別にオチはない)