
API 호출을 위해 외부 URL을 생성하거나 들어온 URL 파싱할 때 쓰는 표준 라이브러리 "net/url"
1. URL 구조체
URL 구조체는 Scheme, Host, Path, Query 등으로 이루어져 있습니다.
u := url.URL{
Scheme: "https",
Host: "example.com",
Path: "/search",
}
2. Query 인코딩
보통 그냥 하드코딩해서 쓰면 &,? 같은 특수 문자를 포함할 때 실수가 일어나는데,
url.Value를 활용하면 실수를 줄이고 안전하게 URL를 만들 수 있습니다.
q := url.Values{}
q.Set("q", "go handbook")
q.Set("page", "1")
u.RawQuery = q.Encode()
fmt.Println("built url:", u.String())
// result: https://example.com/search?page=1&q=go+handbook
3. URL 파싱 및 쿼리 추출
parsed, _ := url.Parse(u.String())
fmt.Println("parsed host:", parsed.Host) // example.com
fmt.Println("query q:", parsed.Query().Get("q")) // go handbook
4. net/url 주요 메서드
func sample() {
v := url.Values{}
v.Set("id", "reo109") // 기존에 "id"가 있다면 덮어쓰고, 없으면 새로 만듭니다.
v.Add("tag", "go") // 기존 "tag"를 유지하며 새로운 값을 리스트에 추가합니다.
v.Add("tag", "backend") // tag=go&tag=backend
v.Get("tag") // 해당 키의 "첫 번째" 값만 반환합니다.
v.Has("mode") // 특정 키가 있는지 확인합니다.
v.Del("id") // 해당 키와 연결된 모든 값을 지웁니다.
v.Encode() // 전체 데이터를 "key=value&..." 형태의 문자열로 변환합니다.
u, _ := url.Parse("https://example.com")
u.JoinPath("api", "v1") // 슬래시(/) 중복을 방지하며 경로를 안전하게 붙입니다.
u.String() // 전체 URL 구조체를 하나의 문자열로 반환합니다.
u.RequestURI() // 호스트를 제외한 "/path?query" 부분만 가져옵니다.
url.QueryEscape("a&b c") // 특수문자와 공백을 쿼리 규격에 맞게 변환합니다. (결과: a%26b+c)
url.PathEscape("a&b c") // URL 경로 규격에 맞게 변환합니다. (결과: a%26b%20c)
}
5. 전체 코드
https://github.com/reochoi109/go-handbook/blob/main/url/basic/main.go
go-handbook/url/basic/main.go at main · reochoi109/go-handbook
A personal handbook of Go patterns and best practices. Lightweight, practical code snippets for real-world backend development. - reochoi109/go-handbook
github.com
'프로그래밍 > golang' 카테고리의 다른 글
| [Golang] net/url 패키지를 활용한 SSRF 방어 (0) | 2026.03.26 |
|---|---|
| [Golang] 자식 프로세스 생명 주기 관리 (Shutdown) (0) | 2026.03.26 |
| [Golang] signalflight.Group (0) | 2026.03.21 |
| [Golang] 서버 종료 로직 구현 (Shutdown) (0) | 2026.03.21 |
| [Golang] 고정 메모리 기반 Rate Limit (0) | 2026.03.21 |