Open AntarcticPresident opened 7 months ago
这个是你想要的功能么?还是更多的关注是内部实现? 😂
这个是你想要的功能么?还是更多的关注是内部实现? 😂
都有吧。 你这个例子我看了,并不能满足需求,所以又去看的内部实现。
我的需求: 我能够自助获取点或者边的各项数据,例如点,我能拿到都有什么tag,tag上的属性值;边的话,我能拿到谁到谁。 现在发布的功能,以及这个例子,都是输出字符串,我得自己想办法提取信息(还挺难的)。
然后我看了内部实现,就发现这地方。数据输出的逻辑里面,定义了一个Value,这个Value的属性就上面一堆,你是什么类型的数据,就存到对应的字段。等到输出的时候,写了一大串if else。不够优雅,所以,就想问问这么设计的初衷是啥?
顺便问下,在value_wrapper里面加上这个方法成不?
func (valWrap ValueWrapper) GetValue() *nebula.Value {
return valWrap.value
}
虽然用起来很麻烦,但起码有个口子能拿到结构化数据,而不是字符串
我是这样转的,还是踩了一个坑,value.asNull()返回的是0(数据库schema是字符串),我干脆返回nil了 func convertValue(value *nebula_go.ValueWrapper) (interface{}, error) { if value.IsString() { return value.AsString() } else if value.IsInt() { return value.AsInt() } else if value.IsBool() { return value.AsBool() } else if value.IsFloat() { return value.AsFloat() } else if value.IsDate() { return value.AsDate() } else if value.IsTime() { return value.AsTime() } else if value.IsDateTime() { return value.AsDateTime() } else if value.IsDuration() { return value.AsDuration() } else if value.IsVertex() { return value.AsNode() } else if value.IsEdge() { return value.AsRelationship() } else if value.IsPath() { return value.AsPath() } else if value.IsList() { return value.AsList() } else if value.IsSet() { return value.AsList() } else if value.IsMap() { return value.AsMap() } else if value.IsGeography(){ return value.AsGeography() } else if value.IsNull(){ return nil, nil } else { return nil, errors.New("nebula query cannot convert data type") } }
这段不能理解,按照逻辑,这里面的属性,只会有一个有值,那把它写成any,然后进行类型判断不好吗?做个interface,不是更简洁?