美文网首页
golng 中的 cgo

golng 中的 cgo

作者: 追风骚年 | 来源:发表于2021-06-23 18:24 被阅读0次

    今天体验了一下 golang 的 cgo 部分,发现 golang 确实太强,调用 c 语言部分直接像是原生操作,go 自己倒变成了一个黏胶语言了,如果我有很多比较底层的 c 库,完全可以用 go 来进行连接。

    可以把 go 的特性带给 c 程序员,把 c 的性能和基础 lib 又送给 go 程序员。

    做了一个小实验

    package main
    
    /*
    #include <stdint.h>
    #include <stdlib.h>
    #include <string.h>
    
    static char* cat(char* str1, char* str2) {
        static char buf[256];
        strcpy(buf, str1);
        strcat(buf, str2);
    
        return buf;
    }
    */
    import "C"
    
    import (
        "fmt"
        "unsafe"
    )
    
    func main() {
        str1, str2 := "hello", " world"
        // golang string -> c string
        cstr1, cstr2 := C.CString(str1), C.CString(str2)
        defer C.free(unsafe.Pointer(cstr1)) // must call
        defer C.free(unsafe.Pointer(cstr2))
        cstr3 := C.cat(cstr1, cstr2)
        // c string -> golang string
        str3 := C.GoString(cstr3)
        fmt.Println(str3) // "hello world"
    }
    
    

    free 函数是 c 的标准库里面的,cat 是顶部注释部分实现的一个函数,在 goland 中显示和操作这部分 c 代码还是很方便的清晰的。

    相关文章

      网友评论

          本文标题:golng 中的 cgo

          本文链接:https://www.haomeiwen.com/subject/eaobyltx.html