golang을 사용하여 브라우저에서 웹 페이지를 일시적으로 열려면 어떻게해야합니까?golang의 브라우저에서 웹 서버를 시작하는 방법은 무엇입니까?
여기는 파이썬 HTTPServer in을 사용하여 수행하는 방법입니다.
golang을 사용하여 브라우저에서 웹 페이지를 일시적으로 열려면 어떻게해야합니까?golang의 브라우저에서 웹 서버를 시작하는 방법은 무엇입니까?
여기는 파이썬 HTTPServer in을 사용하여 수행하는 방법입니다.
귀하의 질문이 좀 잘못된 것입니다.
후자 (정적 파일을 제공하기 위해 웹 서버 가동)의 경우 http.FileServer()
기능을 사용할 수 있습니다. 보다 자세한 내용은 Include js file in Go template 및 With golang webserver where does the root of the website map onto the filesystem>을 참조하십시오.
예 당신의 /tmp/data
폴더 제공 : 당신이 (이동 코드에 의해 생성) 동적 콘텐츠를 제공하려는 경우
http.Handle("/", http.FileServer(http.Dir("/tmp/data")))
panic(http.ListenAndServe(":8080", nil))
, 당신은 net/http
패키지를 사용하고 응답을 생성하는 자신의 핸들러를 작성 할 수 있습니다, 예를 들면 :
func myHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello from Go")
}
func main() {
http.HandleFunc("/", myHandler)
panic(http.ListenAndServe(":8080", nil))
}
첫 번째로 (기본 브라우저에서 페이지를 열 때) Go 표준 라이브러리에는 기본 제공 기능이 없습니다. 그러나 그렇게 어렵지는 않습니다. OS 별 외부 명령을 실행하면됩니다.
// open opens the specified URL in the default browser of the user.
func open(url string) error {
var cmd string
var args []string
switch runtime.GOOS {
case "windows":
cmd = "cmd"
args = []string{"/c", "start"}
case "darwin":
cmd = "open"
default: // "linux", "freebsd", "openbsd", "netbsd"
cmd = "xdg-open"
}
args = append(args, url)
return exec.Command(cmd, args...).Start()
}
이 예제 코드는 Gowut에서 가져온 것입니다 : 당신은이 크로스 플랫폼 솔루션을 사용할 수있다 (이동 웹 UI 툴킷이다; 공개 : 나는 저자 해요). 기본 브라우저에서 이전에 시작 웹 서버를 열려면이 사용
: http.ListenAndServe()
블록과 (오류가없는 경우) 결코 반환 :
open("http://localhost:8080/")
마지막으로 한가지주의합니다.
go open("http://localhost:8080/")
panic(http.ListenAndServe(":8080", nil))
체크 아웃 웹 서버가 시작된 후 브라우저를 시작하는 방법 다른 대안이 질문 : Go: How can I start the browser AFTER the server started listening?
매우 일반적인 문제입니다. 당신을 위해 xdg-open
프로그램을 사용할 수 있습니다. Go에서 프로세스를 실행하십시오. xdg-open
은 자체적으로 실행되므로 Run
을 사용하고 프로세스가 끝날 때까지 기다릴 수 있습니다. 는 웹 브라우저에서 로컬 페이지를 여는 방법을 요구하지만 실제로는 브라우저에서 열 수 있도록 웹 서버를 해고하는 방법을 알고 원하는
package main
import "os/exec"
func main() {
exec.Command("xdg-open", "http://example.com/").Run()
}
마지막으로 그래서 당신은 예를 들어, 서버 또는 다른 goroutine에서 브라우저를 시작해야 나는 브라우저를 시작하기 전에 짧은 지연을 추가하여 브라우저가 첫 번째 요청을 보내기 전에 서버가 청취 할 시간이 있는지 확인했습니다. 필자의 리눅스 시스템에서는 xdg가 제대로 구성되지 않았고 xdg 구성을 수정하는 대신 "xdg-open"이 아닌 "firefox"로 하드 와이어되었습니다. 개발중인 웹 서버와 동일한 컴퓨터에서 브라우저를 시작하는 것이 좋습니다. 그러나 배포시 웹 서버는 헤드리스 원격 시스템에서 실행될 가능성이 높으며 터미널 세션에서 원격 서버로 복사하여 로컬 브라우저에 붙여 넣기 위해 콘솔에 초기 URL을 인쇄하는 것이 더 적합 할 수 있습니다.
package main
import (
"fmt"
"net/http"
"time"
)
func myHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello from Go")
}
func main() {
http.HandleFunc("/", myHandler)
go func() {
<-time.After(100 * time.Millisecond)
open("http://localhost:8080/")
}()
panic(http.ListenAndServe(":8080", nil))
}
안녕하세요.제공 한 코드에는 "net/http"를 가져 오지 않고 "os/exec"를 가져 오지만 사용하지 않고 정의되지 않은 "open"을 호출하는 등 많은 구문 오류가 있습니다. 이 질문에 답할 수 있도록 코드를 편집하고 테스트 해주십시오. 감사. – JamesStewy
@'icza'는 Go 마스터입니다 ... 좋은 직장 – openwonk