小编Ans*_*yal的帖子

如何在 Unmarshal 中使用泛型(转到 1.18)

我是 golang 泛型的新手,并且有以下设置。

  1. 我收集了大量不同类型的报告。
  2. 每个报告都有封闭字段
  3. 所以我把它包裹在一个ReportContainerImpl

我使用了一个类型参数, [T Reportable]Reportable定义如下

type Reportable interface {
    ExportDataPointReport | ImportDataPointReport | MissingDataPointReport | SensorThresoldReport
}
Run Code Online (Sandbox Code Playgroud)

类型约束中的每个类型都是要嵌入到容器中的结构。

type ReportContainerImpl[T Reportable] struct {
    LocationID string `json:"lid"`
    Provider string `json:"pn"`
    ReportType ReportType `json:"m"`
    Body T `json:"body"`
}
Run Code Online (Sandbox Code Playgroud)

我使用鉴别器ReportType来确定何时的具体类型Unmarshal

type ReportType string

const (
    ReportTypeExportDataPointReport ReportType = "ExportDataPointReport"
    ReportTypeImportDataPointReport ReportType = "ImportDataPointReport"
    ReportTypeMissingDataPointReport ReportType = "MissingDataPointReport"
    ReportTypeSensorThresoldReport ReportType = "SensorThresoldReport"
)
Run Code Online (Sandbox Code Playgroud)

由于go不支持struct的类型断言(仅支持接口),因此无法在 when …

generics marshalling go unmarshalling

10
推荐指数
1
解决办法
8908
查看次数

Node.js 承诺链接

我是 Node.js 的新手,能够使用 promise 一一运行这些命令:

let promise1 = new Promise(function (resolve, reject) {
sftp.connect({
    host: host,
    username: user,
    privateKey: fs.readFileSync(pemfile)
}).then(() => {
    return sftp.get(remotePath, fs.createWriteStream(localPath));   //This writes from a remote file to a local file
}).then(() => {
    sftp.end();
    resolve();
})
    .catch(err => {
        console.error(err.message);
        reject(err);
    });
});

await promise1;

let promise2 = new Promise(function (resolve, reject) {
    fs.readFile(localPath, 'utf8', function (err, data) {
        if (err) {
            reject(err);
        }
        resolve(data);
    });
});

let data  = await promise2;
Run Code Online (Sandbox Code Playgroud)

这有效,但我知道这不是最好的方法。有一个更好的方法吗?

javascript node.js

2
推荐指数
1
解决办法
49
查看次数

标签 统计

generics ×1

go ×1

javascript ×1

marshalling ×1

node.js ×1

unmarshalling ×1