// Copyright © 2017 ChaiShushan . // License: https://creativecommons.org/licenses/by-nc-sa/4.0/ package main //#include "./person_capi.h" import "C" import "unsafe" //export person_new func person_new(name *C.char, age C.int) C.person_handle_t { id := NewObjectId(NewPerson(C.GoString(name), int(age))) return C.person_handle_t(id) } //export person_delete func person_delete(h C.person_handle_t) { ObjectId(h).Free() } //export person_set func person_set(h C.person_handle_t, name *C.char, age C.int) { p := ObjectId(h).Get().(*Person) p.Set(C.GoString(name), int(age)) } //export person_get_name func person_get_name(h C.person_handle_t, buf *C.char, size C.int) *C.char { p := ObjectId(h).Get().(*Person) name, _ := p.Get() n := int(size) - 1 bufSlice := ((*[1 << 31]byte)(unsafe.Pointer(buf)))[0:n:n] n = copy(bufSlice, []byte(name)) bufSlice[n] = 0 return buf } //export person_get_age func person_get_age(h C.person_handle_t) C.int { p := ObjectId(h).Get().(*Person) _, age := p.Get() return C.int(age) }