最推荐用 http.ParseMediaType 解析 Content-Type 字符串,它能正确拆分主/子类型及参数;mime.TypeByExtension 用于扩展名推断类型,ExtensionsByType 用于反向查扩展名,自定义注册需在 init 阶段调用。
Go 标准库的 mime 包主要用于 MIME 类型的解析、匹配和注册,但它本身不直接解析 HTTP 请求头中的 Content-Type 字符串(比如带参数的 text/plain; charset=utf-8)。真正负责解析 Content-Type 的是 net/http 包里的 http.ParseMediaType 函数——它底层会调用 mime 的能力,但提供了更完整的语义支持。
这是最常用、最推荐的方式。它能正确拆分主类型、子类型和参数(如 charset、boundary),并处理转义和空格等边界情况。
text/html)、参数 map(如 map[string]string{"charset": "utf-8"})、以及可能的错误适合根据文件后缀(如 .jpg、.json)快速获取标准 MIME 类型,常用于静态文件服务或上传文件类型校验。
mime.AddExtensionType 注册自定义映射
svg+xml"反向查找,适合做类型标准化或生成推荐后缀。返回的是字符串切片,顺序按常见度排列(如 "text/plain" 返回 []string{".txt", ".text", ".conf"})。
使用 mime.AddExtensionType 或 mime.AddMimeType 可扩展内置表,但必须在程序早期(如 init())调用,且不能覆盖已有映射(会 panic)。
mime.AddExtensionType(".webp", "image/webp")mime.AddMimeType("application/vnd.myapp+json", ".myj")TypeByExtension 和 ExtensionsByType,不影响 ParseMediaType
不复杂但容易忽略:Content-Type 解析逻辑应交由 http.ParseMediaType,mime 包更适合做类型推断与注册。两者分工明确,混用反而增加出错风险。