//aardio 调用 Go 语言 - JSON 自动同步 import golang; var go = golang(); go.main = /********** package main import "C" import ( "time" "aardio" ) /* Go 结构的 JSON 字段要大写首字母, 每个字段可以在类型名后面额外添加 tag 字符串声明在 JSON 中的字段名。 */ type QueryParam struct { Service string `json:"service"` Domain string `json:"domain"` Timeout time.Duration `json:"timeout"` } //export Query func Query(json *string) { //创建结构体 var queryParam = QueryParam{} /* 解析 JSON 到结构体, aardio.JsonParam() 返回函数对象用于更新 JSON。 defer 语句用于推迟到函数退出前调用。 */ defer aardio.JsonParam(json, &queryParam)() //读取结构体的值,修改结构体的值,aardio 可以自动获取新值 queryParam.Domain = queryParam.Domain + "|www.aardio.com" } func main(){} **********/ go.buildShared("/.go/jsonTest.go"); var dll = raw.loadDll("/.go/jsonTest.dll",,"cdecl"); import golang.string; //参数不是字符串、buffer、null 时会自动转换为 JSON 字符串 var jsonParam = golang.string({ service = "_services._dns-sd._udp"; domain = "local"; timeout = 1000; }) //调用 Go 函数 dll.Query( jsonParam ); /* 只要存储的是自动转换为 JSON 的对象, 那么 Go 修改 JSON 后 aardio 也会自动解析 JSON 为对象。 通过 value 获取解析后的对象。 */ var goObject = jsonParam.value; //查看对象的字段值,已经被 Go 修改了 console.dumpJson( goObject.domain ) console.pause(true);