[golang] URL 및 쿼리 파라미터 파싱과 수정하기

2024. 11. 15. 23:15·Language/Go

서론

Go 언어에서는 net/url 패키지를 사용하여 URL을 간단하게 파싱하고 필요에 따라 URL을 수정할 수 있다. 이 패키지는 URL의 각 구성 요소를 쉽게 추출할 수 있게 해주며 URL을 생성하거나 수정할 때도 사용할 수 있다. URL을 파싱한 후에는 쿼리 파라미터를 동적으로 추가하거나 수정할 수 있으며, URL을 새롭게 생성하는 것도 가능하다.

 

URL 파싱하기

package main

import (
	"fmt"
	"net/url"
)

func main() {
	rawURL := "https://blog.jae-sung.com/archive/20241115?name=jaeusng&status=sleeply#home"
	parsedURL, err := url.Parse(rawURL)
	if err == nil {
		fmt.Println("Scheme:", parsedURL.Scheme)
		fmt.Println("Host:", parsedURL.Host)
		fmt.Println("Path:", parsedURL.Path)
		fmt.Println("Fragment:", parsedURL.Fragment)
		fmt.Println()
		fmt.Println("[Query Params]")
		queryParams := parsedURL.Query()
		for k, v := range queryParams {
			fmt.Printf("%s: %s\n", k, v)
		}
	}
}

출력 결과

Scheme: https
Host: blog.jae-sung.com
Path: /archive/20241115
Fragment: home

[Query Params]
name: [jaeusng]
status: [sleeply]

이 예제에서는 url.Parse로 URL을 파싱한 후 각 구성 요소와 쿼리 파라미터를 출력한다.

URL 수정하기

package main

import (
	"fmt"
	"net/url"
)

func main() {
	rawURL := "https://blog.jae-sung.com/archive/20241115?name=jaeusng&status=sleeply#home"
	parsedURL, err := url.Parse(rawURL)
	if err == nil {
		//parsedURL = &url.URL{}
		parsedURL.Scheme = "rtsp"
		parsedURL.User = url.UserPassword("jaesung", "pass")
		parsedURL.Host = "jae-sung.com:5544"
		parsedURL.Path = "live"
		parsedURL.Fragment = "ch1"

		queryParams := parsedURL.Query()
		queryParams.Add("status", "tipsy")
		queryParams.Set("room", "335")
		queryParams.Del("name")
		parsedURL.RawQuery = queryParams.Encode()
		fmt.Println(parsedURL.String())
	}
}

출력 결과

rtsp://jaesung:pass@jae-sung.com:5544/live?room=335&status=sleeply&status=tipsy#ch1

이 예제에서는 파싱된 URL을 수정하여 새로운 URL을 생성하고 출력한다. 코드에서 주석을 제거하면 URL을 새롭게 구성하는 예제로 사용할 수 있다. net/url 패키지를 활용하면 URL을 효과적으로 파싱하고 수정할 수 있어 다양한 웹 애플리케이션에서 활용될 수 있다.

'Language > Go' 카테고리의 다른 글

[golang] runtime 패키지로 메모리 사용 추적  (0) 2024.11.17
[golang] 메모리 지역성을 고려한 2차원 슬라이스 순회  (0) 2024.11.16
[golang] 텍스트 이미지 생성 및 JPEG 인코딩  (0) 2024.11.14
[golang] GOMAXPROCS로 최대 CPU 코어 수 제한하기  (0) 2024.11.13
[golang] 파일 잠금으로 프로그램 중복 실행 방지하기  (0) 2024.11.12
'Language/Go' 카테고리의 다른 글
  • [golang] runtime 패키지로 메모리 사용 추적
  • [golang] 메모리 지역성을 고려한 2차원 슬라이스 순회
  • [golang] 텍스트 이미지 생성 및 JPEG 인코딩
  • [golang] GOMAXPROCS로 최대 CPU 코어 수 제한하기
在晟
在晟
  • 在晟
    Jae-Sung
    在晟
  • 전체
    오늘
    어제
    • 분류 전체보기 (25)
      • Language (23)
        • Go (23)
      • DBMS (1)
        • MariaDB (1)
      • Notes (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Jae-Sung
    • GitHub
  • 인기 글

  • 태그

    go
    interface{}
    fasthttp
    Runtime
    티스토리챌린지
    http
    오블완
    filepath
    unsafe
    recover
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
在晟
[golang] URL 및 쿼리 파라미터 파싱과 수정하기
상단으로

티스토리툴바