2016-09-04 3 views

답변

12

귀하의 질문이 좀 잘못된 것입니다.

후자 (정적 파일을 제공하기 위해 웹 서버 가동)의 경우 http.FileServer() 기능을 사용할 수 있습니다. 보다 자세한 내용은 Include js file in Go templateWith 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?

+0

@'icza'는 Go 마스터입니다 ... 좋은 직장 – openwonk

0

매우 일반적인 문제입니다. 당신을 위해 xdg-open 프로그램을 사용할 수 있습니다. Go에서 프로세스를 실행하십시오. xdg-open은 자체적으로 실행되므로 Run을 사용하고 프로세스가 끝날 때까지 기다릴 수 있습니다. 는 웹 브라우저에서 로컬 페이지를 여는 방법을 요구하지만 실제로는 브라우저에서 열 수 있도록 웹 서버를 해고하는 방법을 알고 원하는

package main 

import "os/exec" 

func main() { 
    exec.Command("xdg-open", "http://example.com/").Run() 
} 
-1

마지막으로 그래서 당신은 예를 들어, 서버 또는 다른 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)) 
} 
+0

안녕하세요.제공 한 코드에는 "net/http"를 가져 오지 않고 "os/exec"를 가져 오지만 사용하지 않고 정의되지 않은 "open"을 호출하는 등 많은 구문 오류가 있습니다. 이 질문에 답할 수 있도록 코드를 편집하고 테스트 해주십시오. 감사. – JamesStewy

관련 문제