搜索文档搜索当前语言
互操作
候选版本v0.20260809.0-rc.5

本文档对应当前协同发布候选版本。

互操作

边界数据类型

使用与 Go 兼容的 aggregate 布局、多返回值与 GC 安全 variant。

C2Go 为少量 Go aggregate 值定义了 C 表示。在 64 位 target 上,这些布局可以按值跨越边界。

内建 aggregate

C 类型 Go 值 64 位布局
c2go_slice []T data、length、capacity
c2go_string string data、length
c2go_iface interface table、data
c2go_error error 与 interface 相同的两个字

__c2go_intptr 是这些定义使用的、与指针同宽的有符号 Go int。

这些值只描述 ABI 布局,不等于完整 Go 语言语义。当前 C2Go 没有为 c2go_iface 提供动态 interface method dispatch 的 C 语法或辅助 API;需要调用某个方法时,应在 Go 侧提供具名 wrapper,再用 c2go_linkname 绑定这个静态符号。

多返回值

当 Go 函数返回多个值时,用完整 struct 配合 c2go_returntype:

struct ReadResult {
    c2go_slice bytes;
    c2go_error error;
};

extern struct ReadResult go_read(c2go_string path)
    c2go_linkname("example.com/files.Read")
    c2go_returntype(struct ReadResult);

每个字段映射一个 Go result slot,函数声明的返回类型必须与注解中的 struct 完全一致。

GC 兼容 union

c2go_variant 请求一种 Go GC 能推理的表示:

union __attribute__((c2go_variant)) Number {
    int integer;
    float real;
};

该属性只适用于 union。无法安全消歧的重叠指针成员会被拒绝;它并不允许任意 pointer punning。

如果需要检索普通 C 语法和 C2Go 特有拼写,请继续阅读 C 语言速查。