2016-09-04 5 views

答えて

12

あなたの質問は少し誤解を招くおそれがあります。

(静的ファイルを提供するWebサーバーを起動する)場合は、http.FileServer()関数を使用できます。詳しくは、Include js file in Go templateWith golang webserver where does the root of the website map onto the filesystem>を参照してください。

http.Handle("/", http.FileServer(http.Dir("/tmp/data"))) 
panic(http.ListenAndServe(":8080", nil)) 

あなたは(ゴーコードによって生成された)動的なコンテンツを提供したい場合は、あなたがnet/httpパッケージを使用して応答を生成する独自のハンドラを記述することができ、例えば:

あなた /tmp/dataフォルダにサービスを提供

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() 
} 

このサンプルコードは(ゴーのWeb UIツールキットである。開示:私は著者です)Gowutから取られています。

open("http://localhost:8080/") 

一つ注意すべき最後の事:デフォルトのブラウザで以前に開始したWebサーバを開くには、これを使用し

(エラーがない場合)http.ListenAndServe()ブロックと決してを返します。だから、たとえば、別のゴルーチン内のサーバーやブラウザを起動する必要があります。

go open("http://localhost:8080/") 
panic(http.ListenAndServe(":8080", nil)) 

をWebサーバが開始された後、ブラウザを起動する方法を他の選択肢のためにこの質問をチェックアウト:Go: How can I start the browser AFTER the server started listening?

+0

@ 'icza'はゴーマスターです...素敵な仕事 – openwonk

0

これはかなり一般的な問題です。 xdg-openプログラムを使用すると、あなたのためにそれを行うことができます。 Goからプロセスを実行するだけです。 xdg-openは単独でフォークしますので、単にRunを使用してプロセスの終了を待ちます。それは、Webブラウザでローカルページを開く方法を尋ねていますが、実際にそれをブラウザで開くことができるように、Webサーバを起動する方法を知りたいと

package main 

import "os/exec" 

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

最後の時間を私はこのようなことをしました。ブラウザを起動する前に短い時間を追加して、ブラウザが最初のリクエストを送信する前にリッスンする時間があることを確認しました。私のLinuxシステムでは、xdgは正しく構成されておらず、xdg構成を修正するのではなく、xdg-openではなくfirefoxでハードワイヤード接続しました。 Webサーバーと同じマシン上でブラウザーを起動すると、開発のために良いものになりました。しかし展開では、Webサーバーはヘッドレスのリモートシステム上で動作する可能性が高く、ターミナルセッションからリモートサーバーへのコピー貼り付け用の初期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

関連する問題