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
}