cgo-callback/main.go

46 lines
667 B
Go

package main
import (
"fmt"
"sync"
"unsafe"
)
/*
#cgo CFLAGS: -I .
#cgo LDFLAGS: -L .
#include "mylib.h"
void callOnMeGo_cgo(int n);
*/
import "C"
//export callOnMeGo
func callOnMeGo(n int) {
printerCallback(n)
}
type Printer func(int)
var printerCallback Printer
var printerCallbackLock sync.RWMutex
func usePrinter(p Printer) {
printerCallbackLock.Lock()
printerCallback = p
C.use_printer((C.printer_t)(unsafe.Pointer(C.callOnMeGo_cgo)))
printerCallback = nil
printerCallbackLock.Unlock()
}
var myPrinter Printer = Printer(func(n int) {
for i := 0; i < n; i++ {
fmt.Printf("%d\n", i)
}
})
func main() {
usePrinter(myPrinter)
}