削除された内容 追加された内容
Go 版176949から分割
 
Ef3 (トーク | 投稿記録)
リファクタリング
タグ: 2017年版ソースエディター
1 行
Goのパッケージ [https://pkg.go.dev/net/http net/http] は http プロトコルのくアイアントとサーバーの機能を提供します。
いわゆる普通のwebサイトの形式である、HTML形式のwebサイトのプロトコルは「HTTP」というプロトコルである。
 
;サーバ側のコード例:<syntaxhighlight lang="go" line>
で、そのHTTPサーバを建てる場合、localhostでいいなら
 
;サーバ側のコード例
<syntaxhighlight lang="go">
package main
 
import (
"fmt"
"net/httplog"
"net/http"
)
 
func main() {
http.HandleFunc("/", aaafunc(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, `
http.ListenAndServe("localhost:8080", nil)
<!DOCTYPE html>
}
<html lang="ja">
 
<head>
 
<meta charset="utf-8">
func aaa(qq http.ResponseWriter, ttt *http.Request) {
<title>Go Web server</title>
 
</head>
fmt.Fprintf(qq,"<h1>あいうえお</h1>\n" )
<body>
 
<h1>このウェブサービスはGoで走っています。</h1>
"fmt" %v
<p><a href="/link">/link</a></p>
</body>
</html>
`, r)
})
func aaa http.HandleFunc("/link", func(qqw http.ResponseWriter, tttr *http.Request) {
fmt.Fprintf(w, `
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Go Web server</title>
</head>
<body>
<h1>リンク先</h1>
%v
<p><a href="/">TOP</a></p>
</body>
</html>
`, r)
})
log.Fatal(http.ListenAndServe("localhost:8080", nil))
}
</syntaxhighlight>
: http.HandleFuncの第二引数に匿名関数を使いました
 
: バッククォートで囲まれた文字列はバッククオート以外のすべての文字がエスケープされないので複数行のHTMLを埋めこむのに便利です
でサーバが建つ。
 
 
上記コード中の「aaa」とか「qq」とか「ttt」はデタラメにつけた名前なので、この部分は他の名前でもいい。
 
 
webブラウザでアドレス「localhost:8000」にアクセスし、拡大表示された「あいうえお」が表示されていれば成功。
 
 
なお、
Fprintf
とは、ファイル入出力の読み書きの関数。Go言語は、このファイル入出力の関数を、HTTP通信にも流用している。(なおPHPも、記述方法は違うが、ファイル入出力の機能を流用する方式である。)
 
 
 
これらの処理でGo言語が一体なにをやっているかというと、ソケット通信というのをやっている。(詳しくは『[[WinSock]]』または『[[Unixソケットプログラミング]]』を参照せよ。)
 
 
 
上記コードでは「aaa」とかデタラメに変数名をつけたが、慣習的には下記コードのような変数名になる。
 
;サーバ側のコード例
<syntaxhighlight lang="go">
package main
 
import (
"fmt"
"net/http"
)
 
func main() {
http.HandleFunc("/", aaa)
http.ListenAndServe("localhost:8080", nil)
}
 
 
func aaa(w http.ResponseWriter, r *http.Request) {
 
fmt.Fprintf(w,"<h1>あいうえお</h1>\n" )
 
}
</syntaxhighlight>
 
「w」とか「r」とか何かよく分からないが、慣習的にこう書くので、その慣習に合わせておこう。
 
[[カテゴリ:Go]]