net
net
ネットワーク通信の汎用的なインタフェースを提供する。
Examples:
// HTTP client
conn, err := net.Dial("tcp", "golang.org:80")
if err != nil {
// handle error
}
fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n")
status, err := bufio.NewReader(conn).ReadString('\n')
// TCP server
ln, err := net.Listen("tcp", ":8080")
if err != nil {
// handle error
}
for {
conn, err := ln.Accept()
if err != nil {
// handle error
}
go handleConnection(conn)
}
type Dialer
https://golang.org/pkg/net/#Dialer
宛先に通信するためのオプションを保持する。
各オプションがゼロ値であれば、オプション無しを意味し、単にDial関数を呼ぶに等しい。
type Dialer struct {
// コネクションタイムアウト
// デフォルトはタイムアウトしない
Timeout time.Duration
:
}
net/http
https://golang.org/pkg/net/http/
HTTPクライアント・サーバ機能を提供するライブラリ。
クライアントは処理が終わったらレスポンスBODYを閉じないと駄目。
Example:
resp, err := http.Get("http://example.com/")
if err != nil {
// handle error
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
// :
参考:
Examples
リクエスト結果をファイルに書き込む:
resp, err := http.Get("...")
check(err)
defer resp.Body.Close()
out, err := os.Create("filename.ext")
if err != nil {
// panic?
}
defer out.Close()
io.Copy(out, resp.Body)
参考:
Variables
var DefaultClient = &Client{}
DefaultTransport
https://golang.org/pkg/net/http/#RoundTripper
var DefaultTransport RoundTripper = &Transport{
Proxy: ProxyFromEnvironment,
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
DualStack: true,
}).DialContext,
ForceAttemptHTTP2: true,
MaxIdleConns: 100,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
}
type Client
https://golang.org/pkg/net/http/#Client
HTTPクライアント。
type Client struct {
// デフォルトではDefaultTransportが使われる
Transport RoundTripper
// HTTPリクエストのタイムリミット。
// デフォルト(ゼロ値)ではタイムアウトしない。
Timeout time.Duration
:
}
type Response
https://golang.org/pkg/net/http/#Response
type Response struct {
Status string // e.g. "200 OK"
StatusCode int // e.g. 200
Proto string // e.g. "HTTP/1.0"
ProtoMajor int // e.g. 1
ProtoMinor int // e.g. 0
Header Header
Body io.ReadCloser
ContentLength int64
TransferEncoding []string
Close bool
Uncompressed bool // Go 1.7
Trailer Header
Request *Request
TLS *tls.ConnectionState // Go 1.3
}
net/url
https://golang.org/pkg/net/url/
URLパーサとクエリのエスケープを実装する。
URLパスの結合
雑に次のようにやると失敗する:
url := "https://example.com/"
loc := "path/to/index.html"
fullURL := path.Join(url, loc) //=> "https:/example.com/path/to/index.html"
スキーム部分もパスの一部と解釈されておかしなことになる。
面倒だが、汎用的に対処するには、次のようにする。
// エラー処理省略
urlObj, _ := url.Parse(url)
urlObj.Path = path.Join(urlObj.Path, loc)
fullURL := urlObj.String() //=> "https://example.com/path/to/index.html"
func Parse
https://golang.org/pkg/net/url/#Parse
func Parse(rawurl string) (*URL, error)
URL文字列をパースしてURL構造体の値を作る。
type URL
https://golang.org/pkg/net/url/#URL
type URL struct {
Scheme string
Opaque string // encoded opaque data
User *Userinfo // username and password information
Host string // host or host:port
Path string // path (relative paths may omit leading slash)
RawPath string // encoded path hint (see EscapedPath method); added in Go 1.5
ForceQuery bool // append a query ('?') even if RawQuery is empty; added in Go 1.7
RawQuery string // encoded query values, without '?'
Fragment string // fragment for references, without '#'
}
func String
https://golang.org/pkg/net/url/#URL.String
func (u *URL) String() string
URL文字列を作って返す。