我是新手。这个周末试图通过使用GO,AWS Lambdas和https://apex.github.io/up/创建松弛的斜杠命令来学习它。尝试是让一个lambda通知slack,消息说有事情正在发生,然后从那里调用另一个lambda来执行繁重的工作,并在web钩子的帮助下将结果粘贴回松弛通道。问题是这个http.Get(...
正在阻塞并等待繁重的工作完成(我不想要,而且Slack有3秒超时)。当我将此请求逻辑添加到goroutine时,它在本地工作,但在部署到AWS时不会。我得到的消息是松散的我在上面!会尽快通知您!几乎立即通知您,但没有其他事情发生。
package main
import (
"fmt"
"log"
"net/http"
"os"
)
func main() {
addr := ":" + os.Getenv("PORT")
http.HandleFunc("/", handleRequest)
log.Fatal(http.ListenAndServe(addr, nil))
}
func handleRequest(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "I'm on it! Will inform you ASAP!")
if err := r.ParseForm(); err != nil {
http.Error(w, "Error parsing form.", http.StatusBadRequest)
return
}
env := r.Form.Get("text")
http.Get("https://some.path.to.another.lamda?env=" + env)
}
答案 0 :(得分:0)
好的,今天我找到了一些时间调查我的问题,我找到了解决方案。我将请求逻辑添加回go例程,然后在该函数调用之后添加了time.Sleep(1 * time.Second)
以确保在运行时退出之前发出了请求。喜欢这里的答案http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/index.html#gor_app_exit
初学者:)