這甚至可能是不可能的,但我在過去的一個小時里一直在研究,結果一無所獲。我有一個 bash 腳本,它給了我一定的輸出,我想將該輸出添加到 Golang,以便根據 bash 腳本的輸出重定向網站。抱歉,如果這沒有意義,我是 Go 新手
這是我必須運行 bash 腳本并輸出值
func main() {
out, err := exec.Command("/bin/sh", "script.sh").Output()
if err != nil {
log.Fatal(err)
}
fmt.Printf(string(out))
}
然后我想在另一個函式中使用在那里輸出的值并重定向一個 URL,我將如何重定向到一個 url,我希望$variable添加 。這只是我從互聯網上復制的一個例子,但它是我想要復制的。
func redirect(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, "**$variable**", 301)
}
func main() {
http.HandleFunc("/", redirect)
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
uj5u.com熱心網友回復:
假設您的腳本只能在啟動時運行一次,那么這應該可以解決問題:
var redirectTo string
func redirect(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, redirectTo, 301)
}
func main() {
out, err := exec.Command("/bin/sh", "script.sh").Output()
if err != nil {
log.Fatal(err)
}
redirectTo = string(out)
http.HandleFunc("/", redirect)
err = http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
或者,如果您不想擁有全域變數,您可以在運行時生成重定向函式:
func main() {
out, err := exec.Command("/bin/sh", "script.sh").Output()
if err != nil {
log.Fatal(err)
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, string(out), 301)
})
err = http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
如果你想在 out 為空時處理,你可以這樣做:
func redirect(w http.ResponseWriter, r *http.Request) {
if len(redirectTo) == 0 {
http.Error(w, "No URL parsed!", 500)
return
}
http.Redirect(w, r, redirectTo, 301)
}
在這種情況下,這將回傳 HTTP 錯誤 500。
您也可以簡單地退出程式而不是服務:
out, err := exec.Command("/bin/sh", "script.sh").Output()
if err != nil {
log.Fatal(err)
}
if len(out) == 0 {
log.Fatal("no output was returned from script")
}
out如果您愿意,您還可以在此處添加更多驗證,例如它是否是正確的 URL,net/url例如使用包。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/412238.html
標籤:
