解析URL

package main

import (
   "fmt"
   "net/url"
   "path"
   "path/filepath"
   "strings"
)

func main() {
   rawURL := "https://www.manong.life/dir1/dir2/demo.html?name=张三&gender=男&age=18"

   parse, err := url.Parse(rawURL) // 解析URL
   if err != nil {
      panic("解析URL失败:" + err.Error())
   }

   // URL基本信息
   fmt.Println("Scheme -> " + parse.Scheme)           // Scheme -> https
   fmt.Println("Host -> " + parse.Host)               // Host -> www.manong.life
   fmt.Println("Path -> " + parse.Path)               // Path -> /dir1/dir2/demo.html
   fmt.Println("RequestURI -> " + parse.RequestURI()) // RequestURI -> /dir1/dir2/demo.html?name=张三&gender=男&age=18
   fmt.Println("RawQuery -> " + parse.RawQuery)       // RawQuery -> name=张三&gender=男&age=18

   // 获取目录和文件名(含扩展名)
   dir, file := filepath.Split(parse.Path)
   fmt.Println("dir -> " + dir)   // dir -> /dir1/dir2/
   fmt.Println("file -> " + file) // file -> demo.html

   // 获取扩展名和文件名(不含扩展名)
   ext := path.Ext(file)
   filename := strings.TrimSuffix(file, ext)
   fmt.Println("ext -> " + ext)       // ext -> .html
   fmt.Println("name -> " + filename) // name -> demo

   // 获取GET参数
   query := parse.Query()
   name := query.Get("name")
   gender := query.Get("gender")
   age := query.Get("age")
   fmt.Printf("俺叫%+v%+v),今年%+v岁。\n", name, gender, age) // 俺叫张三(男),今年18岁。

   // 判断GET参数是否存在
   if query.Has("height") {
      fmt.Println("height参数存在")
   } else {
      fmt.Println("height参数不存在") // height参数不存在
   }

   // 将GET参数转为map
   params := map[string]string{}
   for _, item := range strings.Split(parse.RawQuery, "&") {
      kv := strings.Split(item, "=") // key-value
      if len(kv) == 2 {
         params[kv[0]] = kv[1]
      }
   }
   fmt.Println(params) // map[age:18 gender:男 name:张三]
}

Copyright © 2024 码农人生. All Rights Reserved