我对golang编程很陌生,我想知道这在Golang中是否可行。
提前谢谢!!
P.S:如果可能的话,任何POC或文档这样做都是非常有帮助的。
发布于 2022-06-10 09:40:20
是的,这是可能的。您要做的就是在包的init函数中注册HTTP处理程序:
package sdk
import (
"net/http"
)
func init() {
http.HandleFunc("/golang-sdk/test-api", TestHandler)
}
func TestHandler(w http.ResponseWriter, r *http.Request) {
// ...
}只要您的包的用户使用DefaultServeMux,您的处理程序就自动可用,只需导入您的包:
package main
import (
"log"
"net/http"
_ "your/sdk"
)
func main() {
log.Fatal(http.ListenAndServe(":3000", nil))
}您的HTTP处理程序是导出的,因此它可以与任何其他ServeMux或第三方路由器一起使用,这些路由器是在另一条路径下注册的,包装在身份验证中等等。
这正是标准库中的net/http/pprof包的工作方式。你看,它很小。
它还展示了另一个良好实践:为HTTP处理程序创建一个单独的包。仅仅导入运行时/pprof并不注册HTTP处理程序。这有一个单独的包裹,只有那个。向外界展示任何功能都应该是一个有意识的决定,而不是偶然。
发布于 2022-06-09 10:01:31
欢迎,你会喜欢去:)
有两种方法我可以想出:
import _ "your_rest_package"时,它就会启动服务器--这是不透明的,而且可能更难维护。或者有一个方法启动您的API并根据它在包中使用它。它会看起来像neath,但我还是不喜欢这个。https://stackoverflow.com/questions/72558151
复制相似问题