這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
package url
import "net/url"
url包解析URL並實現了查詢的逸碼,參見RFC 3986。
Index
- func QueryEscape(s string) string
- func QueryUnescape(s string) (string, error)
- type Error
- func (e *Error) Error() string
- type EscapeError
- func (e EscapeError) Error() string
- type URL
- func Parse(rawurl string) (url *URL, err error)
- func ParseRequestURI(rawurl string) (url *URL, err error)
- func (u *URL) IsAbs() bool
- func (u *URL) Query() Values
- func (u *URL) RequestURI() string
- func (u *URL) String() string
- func (u *URL) Parse(ref string) (*URL, error)
- func (u *URL) ResolveReference(ref *URL) *URL
- type Userinfo
- func User(username string) *Userinfo
- func UserPassword(username, password string) *Userinfo
- func (u *Userinfo) Username() string
- func (u *Userinfo) Password() (string, bool)
- func (u *Userinfo) String() string
- type Values
- func ParseQuery(query string) (m Values, err error)
- func (v Values) Get(key string) string
- func (v Values) Set(key, value string)
- func (v Values) Add(key, value string)
- func (v Values) Del(key string)
- func (v Values) Encode() string
Examples
Package Files
url.go
func QueryEscape
func QueryEscape(s string) string
QueryEscape函數對s進行轉碼使之可以安全的用在URL查詢裡。
func QueryUnescape
func QueryUnescape(s string) (string, error)
QueryUnescape函數用於將QueryEscape轉碼的字串還原。它會把%AB改為位元組0xAB,將'+'改為' '。如果有某個%後面未跟兩個十六進位數字,本函數會返回錯誤。
type Error
type Error struct { Op string URL string Err error }
Error會報告一個錯誤,以及導致該錯誤發生的URL和操作。
func (*Error) Error
func (e *Error) Error() string
type EscapeError
type EscapeError string
func (EscapeError) Error
func (e EscapeError) Error() string
type URL
type URL struct { Scheme string Opaque string // 編碼後的不透明資料 User *Userinfo // 使用者名稱和密碼資訊 Host string // host或host:port Path string RawQuery string // 編碼後的查詢字串,沒有'?' Fragment string // 引用的片段(文檔位置),沒有'#' }
URL類型代表一個解析後的URL(或者說,一個URL參照)。URL基本格式如下:
scheme://[userinfo@]host/path[?query][#fragment]
scheme後不是冒號加雙斜線的URL被解釋為如下格式:
scheme:opaque[?query][#fragment]
注意路徑欄位是以解碼後的格式儲存的,如/%47%6f%2f會變成/Go/。這導致我們無法確定Path欄位中的斜線是來自原始URL還是解碼前的%2f。除非一個用戶端必須使用其他程式/函數來解析原始URL或者重構原始URL,這個區別並不重要。此時,HTTP服務端可以查詢req.RequestURI,而HTTP用戶端可以使用URL{Host: "example.com", Opaque: "//example.com/Go%2f"}代替{Host: "example.com", Path: "/Go/"}。
Example
func Parse
func Parse(rawurl string) (url *URL, err error)
Parse函數解析rawurl為一個URL結構體,rawurl可以是絕對位址,也可以是相對位址。
func ParseRequestURI
func ParseRequestURI(rawurl string) (url *URL, err error)
ParseRequestURI函數解析rawurl為一個URL結構體,本函數會假設rawurl是在一個HTTP請求裡,因此會假設該參數是一個絕對URL或者絕對路徑,並會假設該URL沒有#fragment尾碼。(網頁瀏覽器會在去掉該尾碼後才將網址發送到網頁伺服器)
func (*URL) IsAbs
func (u *URL) IsAbs() bool
函數在URL是絕對URL時才返回真。
func (*URL) Query
func (u *URL) Query() Values
Query方法解析RawQuery欄位並返回其表示的Values類型索引值對。
func (*URL) RequestURI
func (u *URL) RequestURI() string
RequestURI方法返回編碼好的path?query或opaque?query字串,用在HTTP請求裡。
func (*URL) String
func (u *URL) String() string
String將URL重構為一個合法URL字串。
func (*URL) Parse
func (u *URL) Parse(ref string) (*URL, error)
Parse方法以u為上下文來解析一個URL,ref可以是絕對或相對URL。
本方法解析失敗會返回nil, err;否則返回結果和ResolveReference一致。
func (*URL) ResolveReference
func (u *URL) ResolveReference(ref *URL) *URL
本方法根據一個絕對URI將一個URI補全為一個絕對URI,參見RFC 3986 節 5.2。參數ref可以是絕對URI或者相對URI。ResolveReference總是返回一個新的URL執行個體,即使該執行個體和u或者ref完全一樣。如果ref是絕對URI,本方法會忽略參照URI並返回ref的一個拷貝。
type Userinfo
type Userinfo struct { // 內含隱藏或非匯出欄位 }
Userinfo類型是一個URL的使用者名稱和密碼細節的一個不可修改的封裝。一個真實存在的Userinfo值必須保證有使用者名稱(但根據 RFC 2396可以是Null 字元串)以及一個可選的密碼。
func User
func User(username string) *Userinfo
User函數返回一個使用者名稱設定為username的不設定密碼的*Userinfo。
func UserPassword
func UserPassword(username, password string) *Userinfo
UserPassword函數返回一個使用者名稱設定為username、密碼設定為password的*Userinfo。
這個函數應該只用於老式的網站,因為風險很大,不建議使用,參見RFC 2396。
func (*Userinfo) Username
func (u *Userinfo) Username() string
Username方法返回使用者名稱。
func (*Userinfo) Password
func (u *Userinfo) Password() (string, bool)
如果設定了密碼返回密碼和真,否則會返回假。
func (*Userinfo) String
func (u *Userinfo) String() string
String方法返回編碼後的使用者資訊,格式為"username[:password]"。
type Values
type Values map[string][]string
Values將建映射到值的列表。它一般用於查詢的參數和表單的屬性。不同於http.Header這個字典類型,Values的鍵是大小寫敏感的。
Example
func ParseQuery
func ParseQuery(query string) (m Values, err error)
ParseQuery函數解析一個URL編碼的查詢字串,並返回可以表示該查詢的Values類型的字典。本函數總是返回一個包含了所有合法查詢參數的非nil字典,err用來描述解碼時遇到的(如果有)第一個錯誤。
func (Values) Get
func (v Values) Get(key string) string
Get會擷取key對應的值集的第一個值。如果沒有對應key的值集會返回Null 字元串。擷取值集請直接用map。
func (Values) Set
func (v Values) Set(key, value string)
Set方法將key對應的值集設為只有value,它會替換掉已有的值集。
func (Values) Add
func (v Values) Add(key, value string)
Add將value添加到key關聯的值集裡原有的值的後面。
func (Values) Del
func (v Values) Del(key string)
Del刪除key關聯的值集。
func (Values) Encode
func (v Values) Encode() string
Encode方法將v編碼為url編碼格式("bar=baz&foo=quux"),編碼時會以鍵進行排序。