LoginSignup
1

More than 5 years have passed since last update.

cgoを使ったサンプルコード

Posted at

cgo

cgoはGo標準ライブラリで、GoからCのコードを実行できるようになります。
詳細はGoDocをご覧いただきたいですが、
以下のサンプルコードのような形でGoからCコードを実行できます。

cgo_sample.go
package main

// 読み込むCコード片を、'import "C"'の真上にコメントの形で書く必要がある
/*
#include <stdlib.h>
#include <stdio.h>

void hello(char *str)
{
  printf("hello, %s\n", str);
}
*/
import "C"
import "unsafe"

func main() {
  greetingTo := C.CString("cgo")
  // CStringで得たCのstring型は必ず解放しなければならない
  defer C.free(unsafe.Pointer(greetingTo))
  C.hello(greetingTo)
}

実行

$ go run cgo_sample.go
or
$ go build
$ ./cgo_sample
=> hello, cgo

GoからCのコードを実行することができました。
お手軽ですが、特定の型は自前で解放しなければいけなかったりするので注意が必要です。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1