本文整理汇总了Golang中C.GoString函数的典型用法代码示例。如果您正苦于以下问题:Golang GoString函数的具体用法?Golang GoString怎么用?Golang GoString使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GoString函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: getErrorString
func getErrorString(code C.ulong) string {
if code == 0 {
return ""
}
msg := fmt.Sprintf("%s:%s:%s\n",
C.GoString(C.ERR_lib_error_string(code)),
C.GoString(C.ERR_func_error_string(code)),
C.GoString(C.ERR_reason_error_string(code)))
if len(msg) == 4 { //being lazy here, all the strings were empty
return ""
}
//Check for extra line data
var file *C.char
var line C.int
var data *C.char
var flags C.int
if int(C.ERR_get_error_line_data(&file, &line, &data, &flags)) != 0 {
msg += fmt.Sprintf("%s:%s", C.GoString(file), int(line))
if flags&C.ERR_TXT_STRING != 0 {
msg += ":" + C.GoString(data)
}
if flags&C.ERR_TXT_MALLOCED != 0 {
C.CRYPTO_free(unsafe.Pointer(data))
}
}
return msg
}
示例2: mruby2go
func mruby2go(mrb *C.mrb_state, o C.mrb_value) interface{} {
switch o.tt {
case C.MRB_TT_TRUE:
return true
case C.MRB_TT_FALSE:
return false
case C.MRB_TT_FLOAT:
return float32(C._mrb_float(o))
case C.MRB_TT_FIXNUM:
return int32(C._mrb_fixnum(o))
case C.MRB_TT_ARRAY:
{
var list []interface{}
for i := 0; i < int(C._RARRAY_LEN(o)); i++ {
list = append(list, mruby2go(mrb, C.mrb_ary_ref(mrb, o, C.mrb_int(i))))
}
return list
}
case C.MRB_TT_HASH:
{
hash := make(map[string]interface{})
keys := C.mrb_hash_keys(mrb, o)
for i := 0; i < int(C._RARRAY_LEN(keys)); i++ {
key := C.mrb_ary_ref(mrb, keys, C.mrb_int(i))
val := C.mrb_hash_get(mrb, o, key)
hash[C.GoString(C.mrb_string_value_ptr(mrb, key))] = mruby2go(mrb, val)
}
return hash
}
case C.MRB_TT_STRING:
return C.GoString(C.mrb_string_value_ptr(mrb, o))
}
return nil
}
示例3: connect
func connect(conninfo string) (*PgConn, error) {
cs := C.CString(conninfo)
defer C.free(unsafe.Pointer(cs))
conn := C.PQconnectdb(cs)
if C.PQstatus(conn) != C.CONNECTION_OK {
cerr := C.PQerrorMessage(conn)
err := fmt.Errorf("connection failed: %s", C.GoString(cerr))
C.PQfinish(conn)
return nil, err
}
// TODO: support other encodings?
pname := C.CString("client_encoding")
defer C.free(unsafe.Pointer(pname))
cenc := C.PQparameterStatus(conn, pname)
if cenc == nil {
err := errors.New("connection failed: no client encoding")
C.PQfinish(conn)
return nil, err
}
if enc := C.GoString(cenc); enc != "UTF8" {
err := fmt.Errorf(
"connection failed: client encoding not supported: %s", enc)
C.PQfinish(conn)
return nil, err
}
// one-line error message
C.PQsetErrorVerbosity(conn, C.PQERRORS_TERSE)
return &PgConn{conn: conn, conninfo: conninfo}, nil
}
示例4: Enum
func Enum() []Info {
fmt.Printf("")
bus := C.usb_get_busses()
n := 0
for ; bus != nil; bus = bus.next {
for dev := bus.devices; dev != nil; dev = dev.next {
n += 1
}
}
infos := make([]Info, n)
bus = C.usb_get_busses()
n = 0
for ; bus != nil; bus = bus.next {
busname := C.GoString(&bus.dirname[0])
for dev := bus.devices; dev != nil; dev = dev.next {
devname := C.GoString(&dev.filename[0])
var info Info
info.Bus = busname
info.Device = devname
info.Vid = int(dev.descriptor.idVendor)
info.Pid = int(dev.descriptor.idProduct)
infos[n] = info
n += 1
}
}
return infos
}
示例5: LocalZone
// LocalZone returns the *Zone. First it checks the ConnectionOptions.Zone and uses that, otherwise it pulls it fresh from the iCAT server.
func (con *Connection) LocalZone() (*Zone, error) {
var (
cZoneName *C.char
err *C.char
)
if con.Options.Zone == "" {
ccon := con.GetCcon()
if status := C.gorods_get_local_zone(ccon, &cZoneName, &err); status != 0 {
con.ReturnCcon(ccon)
return nil, newError(Fatal, fmt.Sprintf("iRODS Get Local Zone Failed: %v", C.GoString(err)))
}
con.ReturnCcon(ccon)
} else {
cZoneName = C.CString(con.Options.Zone)
}
defer C.free(unsafe.Pointer(cZoneName))
zoneName := strings.Trim(C.GoString(cZoneName), " \n")
if znes, err := con.Zones(); err != nil {
return nil, err
} else {
if zne := znes.FindByName(zoneName, con); zne == nil {
return nil, newError(Fatal, fmt.Sprintf("iRODS Get Local Zone Failed: Local zone not found in cache"))
} else {
return zne, nil
}
}
}
示例6: lolwut
func lolwut() {
runtime.LockOSThread()
var stream unsafe.Pointer
err := C.Pa_OpenDefaultStream(&stream,
0, // no input
1, // mono
C.paFloat32, // 32-bit floating point
48000,
C.paFramesPerBufferUnspecified,
nil,
nil)
if err != C.paNoError {
panic(C.GoString(C.Pa_GetErrorText(err)))
}
err = C.Pa_StartStream(stream)
if err != C.paNoError {
panic(C.GoString(C.Pa_GetErrorText(err)))
}
for {
err := C.Pa_WriteStream(stream, unsafe.Pointer(&genSine(440)[0]), 48000)
if err != C.paNoError {
panic(C.GoString(C.Pa_GetErrorText(err)))
}
}
}
示例7: Open
// Open database and return a new connection.
// You can specify DSN string with URI filename.
// test.db
// file:test.db?cache=shared&mode=memory
// :memory:
// file::memory:
func (d *SQLiteDriver) Open(dsn string) (driver.Conn, error) {
if C.sqlite3_threadsafe() == 0 {
return nil, errors.New("sqlite library was not compiled for thread-safe operation")
}
var db *C.sqlite3
name := C.CString(dsn)
defer C.free(unsafe.Pointer(name))
rv := C._sqlite3_open_v2(name, &db,
C.SQLITE_OPEN_FULLMUTEX|
C.SQLITE_OPEN_READWRITE|
C.SQLITE_OPEN_CREATE,
nil)
if rv != 0 {
return nil, errors.New(C.GoString(C.sqlite3_errmsg(db)))
}
if db == nil {
return nil, errors.New("sqlite succeeded without returning a database")
}
rv = C.sqlite3_busy_timeout(db, 5000)
if rv != C.SQLITE_OK {
return nil, errors.New(C.GoString(C.sqlite3_errmsg(db)))
}
return &SQLiteConn{db}, nil
}
示例8: AddRequire
//export AddRequire
func AddRequire(cTarget uintptr, cRequire *C.char) *C.char {
target := unsizet(cTarget)
target.Requires = append(target.Requires, C.GoString(cRequire))
// Requirements are also implicit labels
target.AddLabel(C.GoString(cRequire))
return nil
}
示例9: Metadata
// Returns all metadata keys from the currently loaded image.
func (self *Canvas) Metadata() map[string]string {
var n C.size_t
var i C.size_t
var value *C.char
var key *C.char
data := make(map[string]string)
cplist := C.CString("*")
properties := C.MagickGetImageProperties(self.wand, cplist, &n)
C.free(unsafe.Pointer(cplist))
for i = 0; i < n; i++ {
key = C.MagickGetPropertyName(properties, C.size_t(i))
value = C.MagickGetImageProperty(self.wand, key)
data[strings.Trim(C.GoString(key), " ")] = strings.Trim(C.GoString(value), " ")
C.MagickRelinquishMemory(unsafe.Pointer(value))
C.MagickRelinquishMemory(unsafe.Pointer(key))
}
return data
}
示例10: GetAllSchemeDetails
func GetAllSchemeDetails() []*SchemeDetails {
allHandles := C.varnam_get_all_handles()
if allHandles == nil {
return []*SchemeDetails{}
}
var schemeDetails []*SchemeDetails
length := int(C.varray_length(allHandles))
for i := 0; i < length; i++ {
handle := (*C.varnam)(C.varray_get(allHandles, C.int(i)))
var detail *C.vscheme_details
rc := C.varnam_get_scheme_details(handle, &detail)
if rc != C.VARNAM_SUCCESS {
return []*SchemeDetails{}
}
schemeDetails = append(schemeDetails, &SchemeDetails{
LangCode: C.GoString(detail.langCode), Identifier: C.GoString(detail.identifier),
DisplayName: C.GoString(detail.displayName), Author: C.GoString(detail.author),
CompiledDate: C.GoString(detail.compiledDate), IsStable: detail.isStable > 0})
C.varnam_destroy(handle)
}
return schemeDetails
}
示例11: go_make_message
//export go_make_message
func go_make_message(
message, source_line, script_resource_name *C.char,
stack_trace unsafe.Pointer,
line, start_pos, end_pos, start_col, end_col int,
) unsafe.Pointer {
go_message := &Message{
C.GoString(message),
C.GoString(source_line),
C.GoString(script_resource_name),
nil,
line,
start_pos,
end_pos,
start_col,
end_col,
}
if stack_trace != nil {
go_message.StackTrace = *(*StackTrace)(stack_trace)
}
if go_message.ScriptResourceName == "undefined" {
go_message.ScriptResourceName = ""
}
maybe_free(unsafe.Pointer(message))
maybe_free(unsafe.Pointer(source_line))
maybe_free(unsafe.Pointer(script_resource_name))
return unsafe.Pointer(go_message)
}
示例12: Zip
//export Zip
func Zip(zipname *C.char, filenames []*C.char) int32 {
f, err := os.Create(C.GoString(zipname))
if err != nil {
log.Println(err)
return -1
}
defer f.Close()
w := zip.NewWriter(f)
defer w.Close()
for _, name := range filenames {
ww, err := w.Create(C.GoString(name))
if err != nil {
log.Println(err)
return -1
}
fi, err := os.Open(C.GoString(name))
if err != nil {
log.Println(err)
return -1
}
defer fi.Close()
if _, err := io.Copy(ww, fi); err != nil {
log.Println(err)
return -1
}
}
return 0
}
示例13: indexMatchedPathCallback
//export indexMatchedPathCallback
func indexMatchedPathCallback(cPath, cMatchedPathspec *C.char, payload unsafe.Pointer) int {
if callback, ok := pointerHandles.Get(payload).(IndexMatchedPathCallback); ok {
return callback(C.GoString(cPath), C.GoString(cMatchedPathspec))
} else {
panic("invalid matched path callback")
}
}
示例14: exec_xpath_function
//export exec_xpath_function
func exec_xpath_function(ctxt C.xmlXPathParserContextPtr, nargs C.int) {
function := C.GoString((*C.char)(unsafe.Pointer(ctxt.context.function)))
namespace := C.GoString((*C.char)(unsafe.Pointer(ctxt.context.functionURI)))
context := (*VariableScope)(ctxt.context.funcLookupData)
argcount := int(nargs)
var args []interface{}
for i := 0; i < argcount; i = i + 1 {
args = append(args, XPathObjectToValue(C.valuePop(ctxt)))
}
// arguments are popped off the stack in reverse order, so
// we reverse the slice before invoking our callback
if argcount > 1 {
for i, j := 0, len(args)-1; i < j; i, j = i+1, j-1 {
args[i], args[j] = args[j], args[i]
}
}
// push the result onto the stack
// if for some reason we are unable to resolve the
// function we push an empty nodeset
f := (*context).ResolveFunction(function, namespace)
if f != nil {
retval := f(*context, args)
C.valuePush(ctxt, ValueToXPathObject(retval))
} else {
ret := C.xmlXPathNewNodeSet(nil)
C.valuePush(ctxt, ret)
}
}
示例15: GetUnitDefinition
//GetUnitDefinition Get the nth GetUnitDefinition object in this Model.
func (m *Model) GetUnitDefinition(n int) (ud *UnitDefinition) {
ud = new(UnitDefinition)
ud.ud = C.Model_getUnitDefinition(m.m, C.uint(n))
ud.ID = C.GoString(C.UnitDefinition_getId(ud.ud))
ud.Name = C.GoString(C.UnitDefinition_getName(ud.ud))
return ud
}