我在C中定义了一个结构,如:
struct SomeStruct
{
int var1;
bool var2;
double var3;
int var4[10];
int var5[10][10];
}
struct SomeStruct entity;
在某个地方有一个输入框,某些用户在GO中输入:
func("entity.var3")
它将在C struct中返回entity.var3的值。
实际上我已经可以通过cffi和
在python中实现它了def get_one_variable(buffer, setup):
value = buffer
for level in setup:
if isinstance(level, str):
value = getattr(value, level)
else:
[base, extends] = level
value = getattr(value, base)
for extend in extends:
value = value[extend]
return value
其中buffer是用“FFI.cdef”定义的python cffi数据指针,设置解析为:
def parse_variable(self, line):
line = line.replace('\n', '').replace(' ', '')
split = line.split('.')
variable = []
for child in split:
match = self.BASE_EXT_REGEX.match(child)
if match is None:
variable.append(child)
else:
base_name = match.group('base_name')
ext_name = match.group('ext_name')
variable.append([base_name, [int(index) for index in
ext_name.replace('[', ']').replace(']]', ']').strip(']').split(']')]])
return variable
所以我可以动态解析“entity.var1”,“entity.var2”,“entity.var3”,“entity.var4 [0]”,“entity.var5 [0] [1]”。
GO中有什么东西或类似东西吗?
答案 0 :(得分:1)
这是由CGO处理的,这是Go中的一个特殊包,允许简单的C集成。您可以详细了解here和here。举个例子,一个简单的CGO例子是:
/*
struct SomeStruct
{
int var1;
bool var2;
double var3;
int var4[10];
int var5[10][10];
}
*/
import "C"
import "fmt"
func main(){
thing := C.struct_SomeStruct{}
thing.var1 = C.int(5)
fmt.Printf("My Struct's var field %d\n",int(thing.var1))
}