2013/08/05

Recent entries from same category

  1. golang と Generics と私
  2. レーベンシュタイン距離を使ったあいまい grep コマンド「lsdgrep」作ってみた
  3. golang オフィシャル謹製のパッケージ依存解決ツール「dep」
  4. Re: Go でシングルバイナリな Web アプリを開発しているときに webpack --watch をうまいところやる
  5. golang の http.Client を速くする

Twitterで「Go言語で、いわゆるプラグインの動的ロードってできる?」という発言を見かけたので。 CGOが書けるのでなんでも出来ます。Linux であれば goffi を使えばほぼ何でも出来ます。
cookieo9/goffi - GitHub

Go FFI (and dlopen) packages to wrap C libraries. This code is not being actively d...

https://github.com/cookieo9/goffi
Windows であれば CGO を使わずとも、もともと Windows API には LoadLibrary、GetProcAddress という物が用意されており、Go言語にもその wrapper が提供されています。
package main

import (
    "log"
    "syscall"
    "unsafe"
)

func main() {
    dll, err := syscall.LoadDLL("user32.dll")
    if err != nil {
        log.Fatal(err)
    }
    defer dll.Release()

    proc, err := dll.FindProc("MessageBoxW")
    if err != nil {
        log.Fatal(err)
    }

    proc.Call(0,
        uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("メッセージ"))),
        uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr("ボックス"))),
        0)
}
golang
便利ですね。

blog comments powered by Disqus