1

我正在查看一些将 autocert 与 go web 服务器一起使用的示例代码。

hostPolicy 实现是否有可能通过动态即从数据库中读取列出的主机(因为它们会不断变化)。

m := autocert.Manager{
        Cache:      certcache,
        Prompt:     autocert.AcceptTOS,
        HostPolicy: hostPolicy,
    }

骨架结构会寻找自定义的 hostPolicy 实现吗?

https://github.com/golang/crypto/blob/master/acme/autocert/autocert.go#L60

是必须返回一个函数吗?

4

1 回答 1

2

它必须返回一个函数吗?

是的,这是autocert.Manager结构签名的一部分。

Manager.HostPolicy字段的类型为autocert.HostPolicy 这实际上是一个 type 的函数func(ctx context.Context, host string) error

骨架结构会寻找自定义的 hostPolicy 实现吗?

您只需为 HostPolicy 字段设置一个自定义函数来实现查询数据库的逻辑。

m := autocert.Manager{
    // ... more fields here
    HostPolicy: func(ctx context.Context, host string) error{
        // implement database calls here
        return nil 
    },
}

根据文档,您应该返回错误以拒绝主机。

于 2018-09-01T20:12:58.107 回答