r := znet.New()
// 默认端口是3788,如果要修改可以以下方式
r.SetAddr(":5000")
r.SetAddr("127.0.0.1:3781")
// 需要绑定多个端口
r.AddAddr(":3782")
// 生成私钥
// openssl genrsa -out server.key 2048
// 生成证书
// openssl req -new -x509 -key server.key -out server.crt -days 3650
// 要使用 HTTPS 则只要传递证书文件
r.AddAddr(":443",znet.TlsCfg{
// http 重定向 https
// HTTPAddr: ":80",
// HTTPProcessing: "<https://zjhttps.73zls.com>",
Key: "key/domain.key",
Cert: "key/domain.pem",// or domain.crt
})
// 如果需要多服务只要再 New 一个即可
r2 := znet.New()
r2.SetAddr(":6666")
// 如果需要随机端口,使用 ":0" 即可
r.SetAddr(":0")
// 启动服务
znet.Run()
r.SetMode(znet.DebugMode) // 开发模式
r.SetMode(znet.TestMode) // 测试模式
r.SetMode(znet.ProdMode) // 生产模式(默认)
接入到 Gin
package main
import (
"github.com/gin-gonic/gin"
"github.com/sohaha/zlsgo/znet"
)
func main() {
r := znet.New()
g := gin.Default()
g.GET("/*", func(c *gin.Context) {
// 转交 znet 接收处理
r.ServeHTTP(c.Writer, c.Request)
})
g.Run()
}
设置模板目录
// 使用 resource 目录作为模板
r.LoadHTMLGlob("resource")
// 设置模板自定义函数,必须在 LoadHTMLGlob 之前
r.SetTemplateFuncMap(template.FuncMap{
"test": func() string {return ""},
})
模板示例
// 定义模板名称,调用时候使用
// c.Template(200, "user/index.html", map[string]interface{}{"name":"Pikachu"})
{{ define "user/index.html" }}
{{template "public/header" .}}
{{ end }}
自定义模板引擎
// 只要实现 znet.Template 接口即可
type Template interface {
Load() error
Render(io.Writer, string, interface{}, ...string) error
}
r.SetTemplate(xxx)
// ReadTimeout WriteTimeout
r.SetTimeout(10 * time.Second)
警告:请看清下图,如果是要控制 HTTP 请求时间请使用 timeout 中间件