Golang:服务http和;从Go web应用程序到Goji的https?

Golang:服务http和;从Go web应用程序到Goji的https?,https,go,goji,Https,Go,Goji,这是一个单一Go web应用(使用Goji)处理http和https流量的正确方法吗 package main import ( "fmt" "net/http" "github.com/zenazn/goji/graceful" "github.com/zenazn/goji/web" ) func main() { r := web.New() //https://127.0.0.1:8000/r r.Get("/r", func(

这是一个单一Go web应用(使用Goji)处理http和https流量的正确方法吗

package main

import (
    "fmt"
    "net/http"
    "github.com/zenazn/goji/graceful"
    "github.com/zenazn/goji/web"
)

func main() {
    r := web.New()
    //https://127.0.0.1:8000/r
    r.Get("/r", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, %s!", "r")
    })

    go graceful.ListenAndServeTLS(":8000", "cert.pem", "key.pem", r)

    r1 := web.New()
    //  http://127.0.0.1:8001/r1
    r1.Get("/r1", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, %s!", "r1")
    })

    graceful.ListenAndServe(":8001", r1)
}

或者,让单一Go web应用程序同时收听端口8000和8001的最佳方法是什么?

您不需要创建新对象,只需将
r
传递到
优雅的ListendServe(“:8001”,r)
,当然,除非您根据https执行不同的操作。

在我的例子中,SSL证书在某些路径上有效,而在某些路径上无效。所以我该怎么办?你现在做的很好。您可以在某处定义常用函数,并将它们添加到
r
r1
中。好的,谢谢,我刚刚开始使用Go。将第一个作为goroutine而将第二个作为goroutine是否正确?是的,因为否则它将阻塞,您可能需要执行
runtime.GOMAXPROCS(runtime.numpu())
以使用所有处理器内核来处理请求。感谢您的帮助!或者,您可以使用nginx终止HTTP和HTTPS(TLS)连接,将它们反向代理到侦听(例如)端口8000的单个Go服务器。这里有一个您可以利用的示例: