首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang能否通过插入SDK的服务公开REST?

Golang能否通过插入SDK的服务公开REST?
EN

Stack Overflow用户
提问于 2022-06-09 09:47:36
回答 2查看 76关注 0票数 -1

我对golang编程很陌生,我想知道这在Golang中是否可行。

  1. 我在golang中创建了一个SDK,它公开了一个API (/golang/test)
  2. 有些项目将我的SDK添加为依赖项
  3. API (/golang/test)从服务中公开。

提前谢谢!!

P.S:如果可能的话,任何POC或文档这样做都是非常有帮助的。

EN

回答 2

Stack Overflow用户

发布于 2022-06-10 09:40:20

是的,这是可能的。您要做的就是在包的init函数中注册HTTP处理程序:

代码语言:javascript
复制
package sdk

import (
    "net/http"
)

func init() {
    http.HandleFunc("/golang-sdk/test-api", TestHandler)
}

func TestHandler(w http.ResponseWriter, r *http.Request) {
    // ...
}

只要您的包的用户使用DefaultServeMux,您的处理程序就自动可用,只需导入您的包:

代码语言:javascript
复制
package main

import (
    "log"
    "net/http"

    _ "your/sdk"
)

func main() {
    log.Fatal(http.ListenAndServe(":3000", nil))
}

您的HTTP处理程序是导出的,因此它可以与任何其他ServeMux或第三方路由器一起使用,这些路由器是在另一条路径下注册的,包装在身份验证中等等。

这正是标准库中的net/http/pprof包的工作方式。你看,它很小。

它还展示了另一个良好实践:为HTTP处理程序创建一个单独的包。仅仅导入运行时/pprof并不注册HTTP处理程序。这有一个单独的包裹,只有那个。向外界展示任何功能都应该是一个有意识的决定,而不是偶然。

票数 1
EN

Stack Overflow用户

发布于 2022-06-09 10:01:31

欢迎,你会喜欢去:)

有两种方法我可以想出:

  1. 使用处理程序包,然后在导入的地方处理它们。这样,就可以清楚地知道在您进行导入的地方处理的端点是什么。这样你就会有更多的控制,而国际海事组织将更容易维护。
  2. 在带有rest的包中,有一个使用处理程序设置服务器的方法。您可能可以使用API在包的init中这样做,因此每当导入import _ "your_rest_package"时,它就会启动服务器--这是不透明的,而且可能更难维护。或者有一个方法启动您的API并根据它在包中使用它。它会看起来像neath,但我还是不喜欢这个。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72558151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档