AI Summary 11.2567.3 Go 相对 URL 解析为绝对路径摘要 2026-08-26
Go 相对 URL 解析为绝对路径

Go相对URL解析为绝对路径

import "path/filepath" 
 func resolveAbsURL(currentURL, relHref string) (string, error) {	
    // 1. 解析当前页面 URL,提取协议、主机和路径
    u, err := url.Parse(currentURL)
    if err != nil {
        return "", fmt.Errorf("invalid current URL: %w", err)
    }
    // 2. 获取当前页面所在目录(注意:path.Dir 处理 "/" 的边界情况)
    baseDir := filepath.Dir(u.Path)
    if baseDir == "." {
        baseDir = "/" // 当前页为根路径(如 http://ex.com/)时,Dir 返回 "."
    }
    // 3. 判断 href 类型并解析
    var absPath string
    if filepath.IsAbs(relHref) {
        // 根相对路径:直接使用,无需拼接
        absPath = relHref
    } else {
        // 文档相对路径:与 baseDir 合并
        absPath = filepath.Join(baseDir, relHref)
    }
    // 4. 构建完整绝对 URL(保留原始 scheme/host)
    u.Path = absPath	
    return strings.Replace(u.String(), "%3F", "?", -1) , nil
}