狠狠撸

狠狠撸Share a Scribd company logo
Gunosy.go #6
net/http + net/url
自己紹介
? 印南 聡志 (いんなみ さとし)
? 6月にGunosyに入社
? https://github.com/satoshi03
? Java/Ruby … 最近 Python/Go 始めました
Package net/http + net/url
? net
? net/http
– cgi
– cookiejar
– httptest
– httputil
– pprof
? net/url
物理層
データリンク層
ネットワーク層 (IP)
トランスポート層(TCP/UDP)
アプリケーション層 (HTTP)
Package net
? Package net provides a portable interface for
network I/O, including TCP/IP, UDP, domain name
resolution, and Unix domain sockets.
? 比較的低レイヤーの通信を実現
物理層
データリンク層
ネットワーク層 (IP)
トランスポート層(TCP/UDP)
アプリケーション層 (HTTP)
Package net
Server Client
Listen()
Accept()
Dial()
Write()
Read()
Write()
Read()
net server
? func Listen(network, laddr string) (Listener, error)
– クライアントからのコネクションするための接続口を作成
– laddr : ローカルアドレス
– network : “tcp”, “tcp4”, “tcp6”, “unix”, “unixpacket”
? 指定可能 : stream orientedなもの
? それ以外 : エラー
– Example :
? Listen(“tcp” “:8080”)
net client
? func Dial(network, address string) (Conn, error)
– 指定したアドレスにnetworkで指定した方法(≒Protocol)で
接続
– Network に指定する値
? tcp, tcp4, tcp6m udp, udp4, udp6, ip, ip4, ip6, unix, unixgram,
unixpacket
– Examples
? Dial(“tcp”, “12.34.56.78:80”)
? Dial(“tcp”, “google.com:http”)
? Dial(“tcp”, “[2001:db8::1]:http”)
? Dial(“tcp”, “[fe80::1%lo0]:80”)
net server
? Func Accept(network, address string) (Conn, error)
– クライアントからの接続を受諾し、Connオブジェクトを返信
– network : “tcp”, “tcp4”, “tcp6”, “unix”, “unixpacket”
? 指定可能 : stream orientedなもの
? それ以外 : エラー
Demo
Package http
? Package http provides HTTP client and server
implementations.
物理層
データリンク層
ネットワーク層 (IP)
トランスポート層(TCP/UDP)
アプリケーション層 (HTTP)
Package http
http.Server
http.Handler
http.Client
ListenAndServe
:80
GET/POST/HEAD
http server
? type Server
type Server struct {
Addr string
Handler Handler
ReadTimeout time.Duration
WriteTimeout time.Duration
MaxHeaderBytes int
TLSConfig *tls.Confis
}
http server
func ListenAndServe(addr string, handler Handler) error
– 指定したアドレス、ハンドラーを使用してサーバー
を起動
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
http server demo
type AppHandler struct {
}
func(index *AppHandler) ServeHTTP(w
http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, ?hello world ?)
}
func main() {
index := new(AppHandler)
http.ListenAndServe(":8080", index)
}
Package http
http.Server
http.Handler http.Handler http.Handler
http.Client
ListenAndServe
:80
GET/POST/HEAD
http.ServeMux
http server
? func Handle(pattern string, handler Handler)
– 指定したパターンでハンドラーを追加
? func HandleFunc(pattern string, handler
func(ResponseWriter, *Request))
– 指定したパターンでファンクションハンドラーを追加
http server demo
type IndexHandler struct {
}
func(index *IndexHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "This is index page.”)
}
type DetailHandler struct {
}
func(index *DetailHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "This is detail page.")?
}
func main() {
index := new(IndexHandler)?
detail := new(DetailHandler)?
http.Handle("/", index)
http.Handle("/detail", detail)
http.ListenAndServe(":8080", nil)
}
http client (1/3)
? func (c *Client) Get(url string) (resp *Response, err
error)
– 指定したURLに対してGETリクエストを送信してレスポンス
を取得
– url : URL文字列
http client(2/3)
? func (c *Client) Post(url string, bodyType string, body
io.Reader) (resp *Response, err error)
– 指定したURLに対してPOSTリクエストを送信
– url : url文字列
– bodyType : post時に送信するバイト列の種類
– body : 送信するバイト列
– Example:
? resp, err := http.Post(“http://example.com/upload",
"image/jpeg", &buf)
http client(3/3)
? func (c *Client) PostForm(url string, data url.Values)
(resp *Response, err error)
– Key Value形式でPOSTリクエストを送信
– url : url文字列
– data : key value形式のデータ
? Example
– resp, err := http.PostForm("http://example.com/form",
url.Values{"key": {"Value"}, "id": {"123"}})
Package url
? URLを管理するパッケージ
– URLのパース
– クエリーのエスケープ処理
type 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
RawQuery string // encoded query values, without '?'
Fragment string // fragment for references, without '#'
}
scheme://[userinfo@]host/path[?query][#fragment]
url
? func Parse(rawurl string) (url *URL, err error)
– URL文字列をパースしてURLオブジェクトを取得
u, err := url.Parse("http://bing.com/search?q=dotnet")
if err != nil {
log.Fatal(err)
}
u.Scheme = "https”
u.Host = "google.com”
q := u.Query()
q.Set("q", "golang")
u.RawQuery = q.Encode()
fmt.Println(u)
> https://google.com/search?q=golang
http://play.golang.org/p/8Id1F0vfvD
url
? QueryEscape(s string) string
– クエリーの文字列のエスケープに変換
? QueryUnescape(s string) (string, error)
– エスケープされたクエリーを文字列に変換
escaped_url := url.QueryEscape(http://bing.com/search?q=test)
fmt.Println("escaped_url : " + escaped_url)
unescaped_url, err := url.QueryUnescape(escaped_url)
if err != nil {
log.Fatal(err)
}
fmt.Println("escaped_url : " + unescaped_url)
escaped_url : http%3A%2F%2Fbing.com%2Fsearch%3Fq%3Dtest
escaped_url : http://bing.com/search?q=test
http://play.golang.org/p/-jZzlqHdXm
Package net
? net
? net/http
– cgi
– cookiejar
– httptest
– httputil
– pprof
? net/url
物理層
データリンク層
ネットワーク層 (IP)
トランスポート層(TCP/UDP)
アプリケーション層 (HTTP)

More Related Content

What's hot (20)

PDF
Let's begin WebRTC
yoshikawa_t
?
PDF
Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)
Panda Yamaki
?
PDF
Netty & Apache Camel
ssogabe
?
PDF
厂肠补辫测て?作る?解析するハ?ケット
Takaaki Hoyo
?
PDF
Scapy presentation Remake(訂正)
ashigirl ZareGoto
?
PDF
Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Panda Yamaki
?
PDF
Hokkaido.cap#10 実践パケット解析まとめ
Panda Yamaki
?
PPTX
Apache Camel Netty component
ssogabe
?
PDF
CTF for ビギナーズ ネットワーク講習資料
SECCON Beginners
?
PDF
import dpkt したよ #ssmjp 2014/02/28
th0x0472
?
PPTX
鲍搁滨や罢贰齿罢を叠贰础惭するアプリを作ったよ!
treby
?
PPTX
ブロッキングの技术的课题(公开版)
UEHARA, Tetsutaro
?
PDF
Hokkaido.cap#5 ケーススタディ(ネットワークの遅延と戦う:後編)
Panda Yamaki
?
KEY
叠别补尘利用アプリ绍介+関连技术ネタ
Kenichi Kambara
?
ODP
迟肠辫诲耻尘辫と迟肠辫谤别辫濒补测と迟肠辫谤别飞谤颈迟别と他。
(^-^) togakushi
?
PDF
PostgreSQL - C言語によるユーザ定義関数の作り方
Satoshi Nagayasu
?
ODP
Mongo dbのgridfsについて
Masahiro Saito
?
PDF
パケットが教えてくれた ルートサーバが 13個の理由
@ otsuka752
?
PDF
Stream processing and Norikra
SATOSHI TAGOMORI
?
PDF
CpawCTF 勉強会 Network
Takaaki Hoyo
?
Let's begin WebRTC
yoshikawa_t
?
Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編)
Panda Yamaki
?
Netty & Apache Camel
ssogabe
?
厂肠补辫测て?作る?解析するハ?ケット
Takaaki Hoyo
?
Scapy presentation Remake(訂正)
ashigirl ZareGoto
?
Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Panda Yamaki
?
Hokkaido.cap#10 実践パケット解析まとめ
Panda Yamaki
?
Apache Camel Netty component
ssogabe
?
CTF for ビギナーズ ネットワーク講習資料
SECCON Beginners
?
import dpkt したよ #ssmjp 2014/02/28
th0x0472
?
鲍搁滨や罢贰齿罢を叠贰础惭するアプリを作ったよ!
treby
?
ブロッキングの技术的课题(公开版)
UEHARA, Tetsutaro
?
Hokkaido.cap#5 ケーススタディ(ネットワークの遅延と戦う:後編)
Panda Yamaki
?
叠别补尘利用アプリ绍介+関连技术ネタ
Kenichi Kambara
?
迟肠辫诲耻尘辫と迟肠辫谤别辫濒补测と迟肠辫谤别飞谤颈迟别と他。
(^-^) togakushi
?
PostgreSQL - C言語によるユーザ定義関数の作り方
Satoshi Nagayasu
?
Mongo dbのgridfsについて
Masahiro Saito
?
パケットが教えてくれた ルートサーバが 13個の理由
@ otsuka752
?
Stream processing and Norikra
SATOSHI TAGOMORI
?
CpawCTF 勉強会 Network
Takaaki Hoyo
?

Viewers also liked (20)

PDF
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
Keisuke Utsumi
?
PDF
狈颈辫辫辞苍诲补苍箩颈氏に怒られても仕方ない、配列型と闯厂翱狈型の使い方
kwatch
?
PDF
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
deris0126
?
PDF
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
Hidenori Takeshita
?
PDF
alphawing meets heroku
Kyosuke Kameda
?
PDF
骋辞を知る
Hirokazu Fukami
?
PDF
骋辞言语と过ごした一週间
Shintaro Kitayama
?
PDF
Eureka go 2015_12_12
matsuo kenji
?
KEY
Chrome osとgo言語からgoogleの今後を妄想してみる
Masakazu Muraoka
?
PPTX
骋颈迟丑耻产第8章
Yuto Suzuki
?
PDF
らくちん Go言語
株式会社驰贰叠滨厂.齿驰窜
?
PPTX
骋辞+谤别惫别濒
Amuro Nishizawa
?
PDF
HighBatch
Nobuhito Sato
?
PDF
Golang, make and robotics #gocon
Hideyuki TAKEI
?
PDF
勉强会への一歩を踏み出すために
Akihiko Horiuchi
?
PPTX
マイクロサービスにおけるクエリー言语について
sz yudppp
?
PDF
2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会
Satoshi Noda
?
PDF
顿辞肠办别谤ぐらし!
Takumi Murano
?
PDF
ISUCON2015 PHPで予選を戦ってみた
Ken Gotoh
?
PDF
ちょっとだけさわってみる Go言語
Satoshi Noda
?
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
Keisuke Utsumi
?
狈颈辫辫辞苍诲补苍箩颈氏に怒られても仕方ない、配列型と闯厂翱狈型の使い方
kwatch
?
Introduction to Vim plugins developed by non-Japanese Vimmer (Japanese version)
deris0126
?
cli.go と cli-init で高速にコマンドラインツールを開発する / The command-line tool developed at hi...
Hidenori Takeshita
?
alphawing meets heroku
Kyosuke Kameda
?
骋辞を知る
Hirokazu Fukami
?
骋辞言语と过ごした一週间
Shintaro Kitayama
?
Eureka go 2015_12_12
matsuo kenji
?
Chrome osとgo言語からgoogleの今後を妄想してみる
Masakazu Muraoka
?
骋颈迟丑耻产第8章
Yuto Suzuki
?
骋辞+谤别惫别濒
Amuro Nishizawa
?
HighBatch
Nobuhito Sato
?
Golang, make and robotics #gocon
Hideyuki TAKEI
?
勉强会への一歩を踏み出すために
Akihiko Horiuchi
?
マイクロサービスにおけるクエリー言语について
sz yudppp
?
2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会
Satoshi Noda
?
顿辞肠办别谤ぐらし!
Takumi Murano
?
ISUCON2015 PHPで予選を戦ってみた
Ken Gotoh
?
ちょっとだけさわってみる Go言語
Satoshi Noda
?
Ad

Similar to Gunosy Go lang study #6 net http url (20)

PDF
Go言語て?作る webアフ?リ@gocon 2013 spring
Takuya Ueda
?
PDF
ヒカルのGo 資料 Webアプリケーションの作り方
Yosuke Furukawa
?
PDF
【とらラホ?LT】go言語て?のweb apiの作り方3選
虎の穴 開発室
?
PPTX
EchoyaGinhanazeSu_inoka.pptx
keink
?
PDF
Janogia20120921 yoshinotakeshi
Keisuke Ishibashi
?
PDF
GoCon2016 spring 自作Webフレームワーク uconを作った話
Masahiro Wakame
?
PDF
OpenStack + Common Lisp
irix_jp
?
PDF
厂辞肠办别迟厂迟谤别补尘入门
Kohei Kadowaki
?
PDF
Web API 通信の符号化について
幸雄 村上
?
PDF
RとWeb API
Yohei Sato
?
PPTX
Akka HTTP
TanUkkii
?
PDF
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Shoot Morii
?
PPTX
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
洵貴 佐川
?
PDF
Rails と Rack と HTTP と通信の話
Progate, Inc.
?
PDF
贬罢罢笔入门
Sho A
?
PDF
今日から始めるGopher - スタートGo #0 @GDG名古屋
Takuya Ueda
?
PDF
APIKit
Kosuke Matsuda
?
PDF
Restful Web Service Ch2
kunit
?
PDF
Tottoruby 20110903
Takashi SAKAGUCHI
?
PDF
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
Kensaku Komatsu
?
Go言語て?作る webアフ?リ@gocon 2013 spring
Takuya Ueda
?
ヒカルのGo 資料 Webアプリケーションの作り方
Yosuke Furukawa
?
【とらラホ?LT】go言語て?のweb apiの作り方3選
虎の穴 開発室
?
EchoyaGinhanazeSu_inoka.pptx
keink
?
Janogia20120921 yoshinotakeshi
Keisuke Ishibashi
?
GoCon2016 spring 自作Webフレームワーク uconを作った話
Masahiro Wakame
?
OpenStack + Common Lisp
irix_jp
?
厂辞肠办别迟厂迟谤别补尘入门
Kohei Kadowaki
?
Web API 通信の符号化について
幸雄 村上
?
RとWeb API
Yohei Sato
?
Akka HTTP
TanUkkii
?
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Shoot Morii
?
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
洵貴 佐川
?
Rails と Rack と HTTP と通信の話
Progate, Inc.
?
贬罢罢笔入门
Sho A
?
今日から始めるGopher - スタートGo #0 @GDG名古屋
Takuya Ueda
?
Restful Web Service Ch2
kunit
?
Tottoruby 20110903
Takashi SAKAGUCHI
?
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
Kensaku Komatsu
?
Ad

Recently uploaded (9)

PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
?
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
PDF
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
?
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
?
PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
PDF
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
?
PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?
PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
?
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
?
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
?
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
?
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?

Gunosy Go lang study #6 net http url

  • 2. 自己紹介 ? 印南 聡志 (いんなみ さとし) ? 6月にGunosyに入社 ? https://github.com/satoshi03 ? Java/Ruby … 最近 Python/Go 始めました
  • 3. Package net/http + net/url ? net ? net/http – cgi – cookiejar – httptest – httputil – pprof ? net/url 物理層 データリンク層 ネットワーク層 (IP) トランスポート層(TCP/UDP) アプリケーション層 (HTTP)
  • 4. Package net ? Package net provides a portable interface for network I/O, including TCP/IP, UDP, domain name resolution, and Unix domain sockets. ? 比較的低レイヤーの通信を実現 物理層 データリンク層 ネットワーク層 (IP) トランスポート層(TCP/UDP) アプリケーション層 (HTTP)
  • 6. net server ? func Listen(network, laddr string) (Listener, error) – クライアントからのコネクションするための接続口を作成 – laddr : ローカルアドレス – network : “tcp”, “tcp4”, “tcp6”, “unix”, “unixpacket” ? 指定可能 : stream orientedなもの ? それ以外 : エラー – Example : ? Listen(“tcp” “:8080”)
  • 7. net client ? func Dial(network, address string) (Conn, error) – 指定したアドレスにnetworkで指定した方法(≒Protocol)で 接続 – Network に指定する値 ? tcp, tcp4, tcp6m udp, udp4, udp6, ip, ip4, ip6, unix, unixgram, unixpacket – Examples ? Dial(“tcp”, “12.34.56.78:80”) ? Dial(“tcp”, “google.com:http”) ? Dial(“tcp”, “[2001:db8::1]:http”) ? Dial(“tcp”, “[fe80::1%lo0]:80”)
  • 8. net server ? Func Accept(network, address string) (Conn, error) – クライアントからの接続を受諾し、Connオブジェクトを返信 – network : “tcp”, “tcp4”, “tcp6”, “unix”, “unixpacket” ? 指定可能 : stream orientedなもの ? それ以外 : エラー
  • 10. Package http ? Package http provides HTTP client and server implementations. 物理層 データリンク層 ネットワーク層 (IP) トランスポート層(TCP/UDP) アプリケーション層 (HTTP)
  • 12. http server ? type Server type Server struct { Addr string Handler Handler ReadTimeout time.Duration WriteTimeout time.Duration MaxHeaderBytes int TLSConfig *tls.Confis }
  • 13. http server func ListenAndServe(addr string, handler Handler) error – 指定したアドレス、ハンドラーを使用してサーバー を起動 type Handler interface { ServeHTTP(ResponseWriter, *Request) }
  • 14. http server demo type AppHandler struct { } func(index *AppHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, ?hello world ?) } func main() { index := new(AppHandler) http.ListenAndServe(":8080", index) }
  • 15. Package http http.Server http.Handler http.Handler http.Handler http.Client ListenAndServe :80 GET/POST/HEAD http.ServeMux
  • 16. http server ? func Handle(pattern string, handler Handler) – 指定したパターンでハンドラーを追加 ? func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) – 指定したパターンでファンクションハンドラーを追加
  • 17. http server demo type IndexHandler struct { } func(index *IndexHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "This is index page.”) } type DetailHandler struct { } func(index *DetailHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "This is detail page.")? } func main() { index := new(IndexHandler)? detail := new(DetailHandler)? http.Handle("/", index) http.Handle("/detail", detail) http.ListenAndServe(":8080", nil) }
  • 18. http client (1/3) ? func (c *Client) Get(url string) (resp *Response, err error) – 指定したURLに対してGETリクエストを送信してレスポンス を取得 – url : URL文字列
  • 19. http client(2/3) ? func (c *Client) Post(url string, bodyType string, body io.Reader) (resp *Response, err error) – 指定したURLに対してPOSTリクエストを送信 – url : url文字列 – bodyType : post時に送信するバイト列の種類 – body : 送信するバイト列 – Example: ? resp, err := http.Post(“http://example.com/upload", "image/jpeg", &buf)
  • 20. http client(3/3) ? func (c *Client) PostForm(url string, data url.Values) (resp *Response, err error) – Key Value形式でPOSTリクエストを送信 – url : url文字列 – data : key value形式のデータ ? Example – resp, err := http.PostForm("http://example.com/form", url.Values{"key": {"Value"}, "id": {"123"}})
  • 21. Package url ? URLを管理するパッケージ – URLのパース – クエリーのエスケープ処理
  • 22. type 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 RawQuery string // encoded query values, without '?' Fragment string // fragment for references, without '#' } scheme://[userinfo@]host/path[?query][#fragment]
  • 23. url ? func Parse(rawurl string) (url *URL, err error) – URL文字列をパースしてURLオブジェクトを取得 u, err := url.Parse("http://bing.com/search?q=dotnet") if err != nil { log.Fatal(err) } u.Scheme = "https” u.Host = "google.com” q := u.Query() q.Set("q", "golang") u.RawQuery = q.Encode() fmt.Println(u) > https://google.com/search?q=golang http://play.golang.org/p/8Id1F0vfvD
  • 24. url ? QueryEscape(s string) string – クエリーの文字列のエスケープに変換 ? QueryUnescape(s string) (string, error) – エスケープされたクエリーを文字列に変換 escaped_url := url.QueryEscape(http://bing.com/search?q=test) fmt.Println("escaped_url : " + escaped_url) unescaped_url, err := url.QueryUnescape(escaped_url) if err != nil { log.Fatal(err) } fmt.Println("escaped_url : " + unescaped_url) escaped_url : http%3A%2F%2Fbing.com%2Fsearch%3Fq%3Dtest escaped_url : http://bing.com/search?q=test http://play.golang.org/p/-jZzlqHdXm
  • 25. Package net ? net ? net/http – cgi – cookiejar – httptest – httputil – pprof ? net/url 物理層 データリンク層 ネットワーク層 (IP) トランスポート層(TCP/UDP) アプリケーション層 (HTTP)

Editor's Notes

  • #24: http://play.golang.org/p/3MNm-ox8rG