美文网首页
Go 调用 C 语言

Go 调用 C 语言

作者: Lupino | 来源:发表于2020-11-22 21:54 被阅读0次

    利用 Go 和 C 语言的交互,我们可以写 go 的 c 扩展。

    新建一个文件 greeter.h, 保存内容如下:

    #ifndef _GREETER_H
    #define _GREETER_H
    
    int greet(const char *name, int year, char *out);
    
    #endif
    

    新建一个文件 greeter.c, 保存内容如下:

    #include "greeter.h"
    #include <stdio.h>
    
    int greet(const char *name, int year, char *out) {
        int n;
    
        n = sprintf(out, "Greetings, %s from %d! We come in peace :)", name, year);
    
        return n;
    }
    

    新建一个文件 greeter.go, 保存内容如下:

    package main
    
    // #cgo CFLAGS: -g -Wall
    // #include <stdlib.h>
    // #include "greeter.h"
    import "C"
    import (
        "fmt"
        "unsafe"
    )
    
    func main() {
        name := C.CString("Gopher")
        defer C.free(unsafe.Pointer(name))
    
        year := C.int(2018)
    
        ptr := C.malloc(C.sizeof_char * 1024)
        defer C.free(unsafe.Pointer(ptr))
    
        size := C.greet(name, year, (*C.char)(ptr))
    
        b := C.GoBytes(ptr, size)
        fmt.Println(string(b))
    }
    

    这一有个注意事项:跟 C 相关的一定要放在 import "C" 上面。
    我之前就是没有放上面,一直没成功。

    相关文章

      网友评论

          本文标题:Go 调用 C 语言

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