aardio 文档

aardio 范例:JSON 自动同步

//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);

Markdown 格式