// Copyright 2010 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.//go:build unix || (js && wasm) || wasip1package mimeimport ()func () {osInitMime = initMimeUnix}// See https://specifications.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-0.21.html// for the FreeDesktop Shared MIME-info Database specification.varmimeGlobs = []string{"/usr/local/share/mime/globs2","/usr/share/mime/globs2",}// Common locations for mime.types files on unix.vartypeFiles = []string{"/etc/mime.types","/etc/apache2/mime.types","/etc/apache/mime.types","/etc/httpd/conf/mime.types",}func ( string) error { , := os.Open()if != nil {return }defer .Close() := bufio.NewScanner()for .Scan() {// Each line should be of format: weight:mimetype:glob[:morefields...] := strings.Split(.Text(), ":")iflen() < 3 || len([0]) < 1 || len([2]) < 3 {continue } elseif [0][0] == '#' || [2][0] != '*' || [2][1] != '.' {continue } := [2][1:]ifstrings.ContainsAny(, "?*[") {// Not a bare extension, but a glob. Ignore for now: // - we do not have an implementation for this glob // syntax (translation to path/filepath.Match could // be possible) // - support for globs with weight ordering would have // performance impact to all lookups to support the // rarely seen glob entries // - trying to match glob metacharacters literally is // not usefulcontinue }if , := mimeTypes.Load(); {// We've already seen this extension. // The file is in weight order, so we keep // the first entry that we see.continue }setExtensionType(, [1]) }if := .Err(); != nil {panic() }returnnil}func ( string) { , := os.Open()if != nil {return }defer .Close() := bufio.NewScanner()for .Scan() { := strings.Fields(.Text())iflen() <= 1 || [0][0] == '#' {continue } := [0]for , := range [1:] {if [0] == '#' {break }setExtensionType("."+, ) } }if := .Err(); != nil {panic() }}func () {for , := rangemimeGlobs {if := loadMimeGlobsFile(); == nil {return// Stop checking more files if mimetype database is found. } }// Fallback if no system-generated mimetype database exists.for , := rangetypeFiles {loadMimeFile() }}func () map[string]string {mimeGlobs = []string{""}typeFiles = []string{"testdata/test.types"}returnmap[string]string{".T1": "application/test",".t2": "text/test; charset=utf-8",".png": "image/png", }}
The pages are generated with Goldsv0.6.7. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds.