我想在Golang中将结构转换为map.如果我可以将JSON标记用作创建的映射中的键(否则默认为字段名称),这也是很好的.
如果您想要将结构转换为映射的快速解决方案,请参阅接受的答案,对其进行upvote并使用该包.
快乐的编码!:)
到目前为止我有这个功能,我正在使用反射包但我不明白如何使用该包,请耐心等待.
func ConvertToMap(model interface{}) bson.M {
ret := bson.M{}
modelReflect := reflect.ValueOf(model)
if modelReflect.Kind() == reflect.Ptr {
modelReflect = modelReflect.Elem()
}
modelRefType := modelReflect.Type()
fieldsCount := modelReflect.NumField()
var fieldData interface{}
for i := 0; i < fieldsCount; i++ {
field := modelReflect.Field(i)
switch field.Kind() {
case reflect.Struct:
fallthrough
case reflect.Ptr:
fieldData = ConvertToMap(field.Interface())
default:
fieldData = field.Interface()
}
ret[modelRefType.Field(i).Name] = fieldData
}
return ret
}
Run Code Online (Sandbox Code Playgroud)
另外我查看了JSON包源代码,因为它应该包含我需要的实现(或部分内容)但不太了解.
最近我有一个任务将文件格式转换为mp4并流式传输.我使用ffmpeg作为转码工具.MP4文件没有通过http协议流式传输[已使用php cgi包装],但随后输出格式更改为mpegts流式传输并正常工作.在网上快速搜索http://wiki.videolan.org/MPEG, 并建议使用mpegts进行流式传输mp4文件.我需要更深入地了解这两种格式,它们的优点和不同之处.
谢谢,彼得
我有一个js承诺的模式,我想识别几个关键字
例如,如果我把代码放在:
var deferred = Q.defer();
Run Code Online (Sandbox Code Playgroud)
在文件中我还有以下各自的值
deferred.reject(err);
deferred.resolve();
return deferred.promise;
Run Code Online (Sandbox Code Playgroud)
完整的代码
例1
function writeError(errMessage) {
var deferred = Q.defer();
fs.writeFile("errors.log", errMessage, function (err) {
if (err) {
deferred.reject(err);
} else {
deferred.resolve();
}
});
return deferred.promise;
}
Run Code Online (Sandbox Code Playgroud)
如果我把大型代码文件(作为字符串)发现此文件包含模式,我想要这样做
另一个例子
var d = Q.defer();/*或$ q.defer*/
在文件中,您还有以下各自的值
d.resolve(val);
d.reject(err);
return d.promise;
Run Code Online (Sandbox Code Playgroud)
完成例2
function getStuffDone(param) {
var d = Q.defer(); /* or $q.defer */
Promise(function(resolve, reject) {
// or = new $.Deferred() etc.
myPromiseFn(param+1)
.then(function(val) { /* or .done …
Run Code Online (Sandbox Code Playgroud) 我有以下问题.我需要一个转换structure
到map[string]interface{}
以进行数据库更新(使用氧化镁作为驱动MongoDB的).
对于部分更新mongoDB中的文档,(最佳)解决方案是转换为映射并删除不需要的字段.要从struct转换为map,请参阅我的其他帖子
我从客户端javascript接收数据并在我的struct模型中写入.但我不想更改/更新某些字段,因此我需要将我的结构转换map[string]interface{}
为删除不需要的字段.
将结构转换为json然后映射它是不正确的,因为不保留字段类型.例如,让以下结构为Image model
:
type Image struct {
Name string `json:name`
Views int `json:views,string`
Owner string `json:owner`
}
Run Code Online (Sandbox Code Playgroud)
到目前为止这么好,但是当我从客户端(即javascript)收到信息时,views字段是一个字符串.如果我将从客户端给出的json输入转换为map,那么views字段仍然是一个字符串,并且该值的内部表示在数据库中更改.因此,下次我从数据库中读取此图像时,视图字段将归零(因为它是来自数据库的字符串表示).
因此,我在结构中编写了来自客户端的json输入(用于View变量的正确转换).但是所有者值不应该更改(一个表单数据库).所以我需要再次将结构转换为map [string] interface {}并在数据库中进行更新之前处理该映射.
使用json包这不是一个选项,因为Views字段中的字符串标记将从int转换为string(转换为map时).
到目前为止,我已经尝试了以下函数将结构转换为map,并且我使用了反射包,并且使用它是一个菜鸟.不太了解包装.
如果你想出一些想法,我将不胜感激.谢谢.
我想知道是否有一种简单的方法可以在打字稿中重载对象的函数属性。例子:
interface Doable {
do(s: number): number;
do(s: string): string;
}
let obj: Doable = {
do(s: number): number;
do(s: string): string;
do(s: number | string) {
return s;
}
}
Run Code Online (Sandbox Code Playgroud)
此处的编译器将引发错误,抱怨do
属性重复。是否有另一种方法可以在不使用的情况下声明函数any
?
我已经知道这个实现会起作用。
let obj: Doable = {
do(s: any) {
return s;
}
}
Run Code Online (Sandbox Code Playgroud) 我需要进行以下(下面)函数调用,以在两种情况下给出相同的结果:
sum(5,4); // 9
sum(5)(4); // this should also print 9
Run Code Online (Sandbox Code Playgroud)
我尝试了以下但它不起作用:
function sum(x,y){
var a = x;
var b = y;
if (y == undefined && y == ''){
return function (a,b){
return a +b;
}
}
else {
return a +b;
}
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我想将实例类转换为普通对象,而又不会丢失方法和/或继承的属性。因此,例如:
class Human {
height: number;
weight: number;
constructor() {
this.height = 180;
this.weight = 180;
}
getWeight() { return this.weight; }
// I want this function to convert the child instance
// accordingly
toJSON() {
// ???
return {};
}
}
class Person extends Human {
public name: string;
constructor() {
super();
this.name = 'Doe';
}
public getName() {
return this.name;
}
}
class PersonWorker extends Person {
constructor() {
super();
}
public report() {
console.log('I am Working');
} …
Run Code Online (Sandbox Code Playgroud) 正如标题所示,我想在不同的控制器中为Sails Js中的相同路径分配多个动作处理程序
我尝试过的:
"post /rest/users": [{
controller: "FirstController",
action: "someAction"
},
{
controller: "SecondController",
action: "otherAction"
}]
Run Code Online (Sandbox Code Playgroud)
但是这给了我Sails中的错误51,并且没有达到任何操作(调试时).我搜索了这个解决方案,但我找不到一些东西.
我知道Sails使用Express的路由中间件,我发现可以通过以下路由在Express中完成:
app.post('/users', createUser, saveToDB, endTheResponse, sendEmail);
Run Code Online (Sandbox Code Playgroud)
我知道一些可能的解决方法(比如在第一个中要求控制器),但这不是我正在寻找的,我无法使Express示例路由适应Sails one.
欢迎任何建议!谢谢.
javascript ×3
go ×2
node.js ×2
typescript ×2
ecmascript-6 ×1
esprima ×1
express ×1
mgo ×1
mp4 ×1
mpeg2-ts ×1
promise ×1
regex ×1
sails.js ×1