美文网首页
golang调用c语言代码-cgo方式

golang调用c语言代码-cgo方式

作者: 写个代码容易么 | 来源:发表于2020-04-25 19:12 被阅读0次

1.cgo简单调用

package main

/*
#include <stdio.h>
void print1(char* s){
    printf("print from c code: %s\n", s);
}
*/
import "C"

func main() {
    text := C.CString("ABC")
    C.print1(text)
}

\color{red}{注意:/**/注释中的c代码一定要放在import "C"之前}

官方文档:The Go file will have access to anything appearing in the comment immediately preceding(在…之前) the line import "C"

2.c结构体调用

package main

/*
typedef struct {
    char* name;
    int age;
} Student;
*/
import "C"
import "fmt"

func main() {
    var stu C.Student;
    stu.name = C.CString("test")
    stu.age = 20

    fmt.Println(C.GoString(stu.name))
    fmt.Println(stu.age)
}

C语言和Go语言字符串转换函数

func C.CString(goString string) *C.char
func C.GoString(cString *C.char) string
func C.GoStringN(cString *C.char, length C.int) string

3.c字符数组赋值

package main

/*
typedef struct {
    char name[255];
    int age;
} Student;
*/
import "C"
import "fmt"

const bufferSize = 255

/**
Golang字符串转换为C的字符数组
*/
func GoString2CCharArray(text string) [bufferSize]C.char {
    result := [bufferSize]C.char{}

    for i := 0; i < len(text) && i < bufferSize; i++ {
        result[i] = C.char(text[i])
    }

    return result
}
/**
C字符数组转换为Golang字符串
 */
func CCharArray2GoString(array [bufferSize]C.char) string {
    //func C.GoString(cString *C.char) string
    var result = C.GoString(&array[0])
    return result
}
func main() {
    var stu C.Student
    stu.name = GoString2CCharArray("name from go")
    stu.age = 20

    fmt.Println(CCharArray2GoString(stu.name))
    fmt.Println(stu.age)
}

4.访问c结构体数组

package main

/*
typedef struct {
    char* name;
    int age;
} Student;

Student student_list[2] = {{"A",20},{"B",21}};
*/
import "C"
import "fmt"

func main() {
    var stu C.Student
    for k, v := range C.student_list {
        stu = v
        fmt.Println("index: ", k)
        fmt.Println(C.GoString(stu.name))
        fmt.Println(stu.age)
    }
}

相关文章

  • Go调用C/C++

    cgo golang是类C的语言 支持调用C接口(不支持调用C++)Go调用C/C++的方式 : C : 直接调用...

  • golang调用c语言代码-cgo方式

    1.cgo简单调用 官方文档:The Go file will have access to anything a...

  • golng 中的 cgo

    今天体验了一下 golang 的 cgo 部分,发现 golang 确实太强,调用 c 语言部分直接像是原生操作,...

  • cgo快速入门之golang调用C语言

    前言 cgo 提供了 golang 和 C 语言相互调用的机制。几乎所有的编程语言都有C语言的影子,当然golan...

  • cgo

    cgo cgo是用来在Go语言中调用C语言的工具 Go语言调用C语言 简单C语言函数 在Go语言中需要通过impo...

  • cgo

    golang与C有着千丝万缕的联系,go代码中可以调用C代码由于项目需要,新使用的golang语言需要调用C语言写...

  • golang调用c动态库

    golang调用c动态库 简介 golang调用c语言动态库,动态方式调用,可指定动态库路径,无需系统目录下 核心...

  • [golang]如何在windows上使用cgo

    golang的cgo是调用gcc编译c代码的,gcc工具链在linux上很方便,但windows上是没有的。而wi...

  • (1)Cgo结构

    总结: 1、import "C" 是启用Cgo,以及cgo配置,头文件,C函数2、需要调用的C语言的内容使用/**...

  • CGO编程

    1)什么是CGO编程?2)CGO语法3)相关资料 一、什么是CGO编程?简单说就是GO语言代码中可以编写C代码和调...

网友评论

      本文标题:golang调用c语言代码-cgo方式

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