面试题答案
一键面试- 定义Go语言中的结构体:
- 在Go语言中定义的结构体需要和C语言中的结构体布局保持一致。如果C语言结构体中有对齐要求,Go语言的结构体标签
cgo
可以用来指定字段的对齐方式。 - 例如,假设C语言中有如下结构体定义:
struct Point { int x; int y; };
- 那么在Go语言中可以这样定义:
package main /* struct Point { int x; int y; }; */ import "C" import "fmt" type Point struct { x C.int y C.int }
- 在Go语言中定义的结构体需要和C语言中的结构体布局保持一致。如果C语言结构体中有对齐要求,Go语言的结构体标签
- 在cgo代码中正确传递结构体:
- 假设C语言中有一个函数,接收
Point
结构体并返回其坐标之和:
int sum_of_points(struct Point p) { return p.x + p.y; }
- 在Go语言中调用这个函数并传递结构体参数:
//export sum_of_points func sum_of_points(p Point) C.int { return p.x + p.y } func main() { var p Point p.x = 3 p.y = 4 result := sum_of_points(p) fmt.Println(int(result)) }
- 在上述代码中,首先在Go语言中定义了和C语言对应的
Point
结构体。然后在Go语言中实现了一个名为sum_of_points
的函数,这个函数接收Point
结构体并返回坐标之和。在main
函数中创建了Point
结构体实例并调用sum_of_points
函数。
- 假设C语言中有一个函数,接收
注意:实际使用中,若C语言函数在外部库中,需要通过 #cgo LDFLAGS: -L/path/to/library -lyourlibrary
等方式链接到相应的库。