init()函数何时运行?

我试图findGo(Golang)中init()函数做什么的精确解释。 我读了Effective Go说什么,但是我不确定我是否完全理解它说的是什么。 我不确定的确切句子如下:

最后,最后的意思是:在包中的所有variables声明已经评估了它们的初始值之后调用init,并且只有在所有导入的包已经被初始化之后才被赋值。

all the variable declarations in the package have evaluated their initializers中的all the variable declarations in the package have evaluated their initializers值的呢? 这是否意味着如果你在一个包和它的文件中声明了“全局variables”,init()将不会运行,直到所有的它被计算出来,然后运行所有的init函数,然后main()运行./main_file_name时。

我也读过马克·萨姆菲尔德的下面这本书:

如果一个包有一个或多个init()函数,它们会在主包的main()函数被调用之前自动执行。

在我的理解, init()只有当你运行意图运行main()的权利? 或主包。 任何人都可以更准确地理解init()随时纠正我

是的假设你有这个 :

 var WhatIsThe = AnswerToLife() func AnswerToLife() int { return 42 } func init() { WhatIsThe = 0 } func main() { if WhatIsThe == 0 { fmt.Println("It's all a lie.") } } 

AnswerToLife()保证在调用init()之前运行, init()保证在main()被调用之前运行。

请记住, init()总是被调用,不pipe是否有main,所以如果你导入一个具有init函数的包,它将被执行。

//编辑

另外,请记住,每个包可以有多个init()函数,它们将按照它们在代码中显示的顺序执行(当然,所有variables都被初始化)。

/ /编辑2倍

许多内部Go包使用init()初始化表等,例如https://github.com/golang/go/blob/883bc6/src/compress/bzip2/bzip2.go#L480

有些东西要添加到这(我会添加作为一个评论,但写这篇文章的时间,我还没有足够的声誉)

在同一个包中有多个inits,我还没有find任何有保证的方法来知道它们将在哪个顺序运行。 例如,我有:

 package config - config.go - router.go 

config.gorouter.go都包含init()函数,但运行router.go的函数首先运行(导致我的应用程序出现混乱)。

如果您处于多个文件的情况,每个文件都有自己的init()函数,请注意不要一个接一个。 在他的例子中,最好使用OneToOne所显示的variables赋值。 最好的部分是:这个variables声明将在包中的所有init()函数之前发生。

例如

config.go:

 var ConfigSuccess = configureApplication() func init() { doSomething() } func configureApplication() bool { l4g.Info("Configuring application...") if valid := loadCommandLineFlags(); !valid { l4g.Critical("Failed to load Command Line Flags") return false } return true } 

router.go:

 func init() { var ( rwd string tmp string ok bool ) if metapath, ok := Config["fs"]["metapath"].(string); ok { var err error Conn, err = services.NewConnection(metapath + "/metadata.db") if err != nil { panic(err) } } } 

不pipe在router.goconfig.go中是否存在var ConfigSuccess = configureApplication() ,都将在运行init()之前运行。

举个例子,你为其他用户devise的框架或库,这些用户最终将在他们的代码中有一个main function ,以执行他们的应用程序。 如果用户直接导入你的库项目的子包,那么该子包的init将首先被调用( 一次 )。 相同的图书馆的根包,等等…

有很多时候, 你可能想要一个代码块被执行,而不存在main func ,直接或不。

如果你作为虚拟库的开发者,导入你的库的具有init函数的子包,它将被首先调用, 一次 ,你没有一个main func但你需要确保一些variables,或者一个表,将在其他函数的调用之前被初始化。

记住,不要担心的一件好事是: init始终每个应用程序执行一次。

init执行发生:

  1. 在“调用者”包的init函数之前,
  2. 在可选的main func
  3. 但是在包级variablesvar = [...] or cost = [...]

当你导入一个包时,它将按顺序运行它的所有init函数

我将给出一个init函数的一个很好的例子。 它会将mimetypes添加到一个名为mime的标准go库中,而一个包级函数将直接使用该mime标准包来获取已经在init函数中初始化的自定义mimetypes:

 package mime import ( "mime" "path/filepath" ) var types = map[string]string{ ".3dm": "x-world/x-3dmf", ".3dmf": "x-world/x-3dmf", ".7z": "application/x-7z-compressed", ".a": "application/octet-stream", ".aab": "application/x-authorware-bin", ".aam": "application/x-authorware-map", ".aas": "application/x-authorware-seg", ".abc": "text/vndabc", ".ace": "application/x-ace-compressed", ".acgi": "text/html", ".afl": "video/animaflex", ".ai": "application/postscript", ".aif": "audio/aiff", ".aifc": "audio/aiff", ".aiff": "audio/aiff", ".aim": "application/x-aim", ".aip": "text/x-audiosoft-intra", ".alz": "application/x-alz-compressed", ".ani": "application/x-navi-animation", ".aos": "application/x-nokia-9000-communicator-add-on-software", ".aps": "application/mime", ".apk": "application/vnd.android.package-archive", ".arc": "application/x-arc-compressed", ".arj": "application/arj", ".art": "image/x-jg", ".asf": "video/x-ms-asf", ".asm": "text/x-asm", ".asp": "text/asp", ".asx": "application/x-mplayer2", ".au": "audio/basic", ".avi": "video/x-msvideo", ".avs": "video/avs-video", ".bcpio": "application/x-bcpio", ".bin": "application/mac-binary", ".bmp": "image/bmp", ".boo": "application/book", ".book": "application/book", ".boz": "application/x-bzip2", ".bsh": "application/x-bsh", ".bz2": "application/x-bzip2", ".bz": "application/x-bzip", ".c++": "text/plain", ".c": "text/xc", ".cab": "application/vnd.ms-cab-compressed", ".cat": "application/vndms-pkiseccat", ".cc": "text/xc", ".ccad": "application/clariscad", ".cco": "application/x-cocoa", ".cdf": "application/cdf", ".cer": "application/pkix-cert", ".cha": "application/x-chat", ".chat": "application/x-chat", ".chrt": "application/vnd.kde.kchart", ".class": "application/java", ".com": "text/plain", ".conf": "text/plain", ".cpio": "application/x-cpio", ".cpp": "text/xc", ".cpt": "application/mac-compactpro", ".crl": "application/pkcs-crl", ".crt": "application/pkix-cert", ".crx": "application/x-chrome-extension", ".csh": "text/x-scriptcsh", ".css": "text/css", ".csv": "text/csv", ".cxx": "text/plain", ".dar": "application/x-dar", ".dcr": "application/x-director", ".deb": "application/x-debian-package", ".deepv": "application/x-deepv", ".def": "text/plain", ".der": "application/x-x509-ca-cert", ".dif": "video/x-dv", ".dir": "application/x-director", ".divx": "video/divx", ".dl": "video/dl", ".dmg": "application/x-apple-diskimage", ".doc": "application/msword", ".dot": "application/msword", ".dp": "application/commonground", ".drw": "application/drafting", ".dump": "application/octet-stream", ".dv": "video/x-dv", ".dvi": "application/x-dvi", ".dwf": "drawing/x-dwf=(old)", ".dwg": "application/acad", ".dxf": "application/dxf", ".dxr": "application/x-director", ".el": "text/x-scriptelisp", ".elc": "application/x-bytecodeelisp=(compiled=elisp)", ".eml": "message/rfc822", ".env": "application/x-envoy", ".eps": "application/postscript", ".es": "application/x-esrehber", ".etx": "text/x-setext", ".evy": "application/envoy", ".exe": "application/octet-stream", ".f77": "text/x-fortran", ".f90": "text/x-fortran", ".f": "text/x-fortran", ".fdf": "application/vndfdf", ".fif": "application/fractals", ".fli": "video/fli", ".flo": "image/florian", ".flv": "video/x-flv", ".flx": "text/vndfmiflexstor", ".fmf": "video/x-atomic3d-feature", ".for": "text/x-fortran", ".fpx": "image/vndfpx", ".frl": "application/freeloader", ".funk": "audio/make", ".g3": "image/g3fax", ".g": "text/plain", ".gif": "image/gif", ".gl": "video/gl", ".gsd": "audio/x-gsm", ".gsm": "audio/x-gsm", ".gsp": "application/x-gsp", ".gss": "application/x-gss", ".gtar": "application/x-gtar", ".gz": "application/x-compressed", ".gzip": "application/x-gzip", ".h": "text/xh", ".hdf": "application/x-hdf", ".help": "application/x-helpfile", ".hgl": "application/vndhp-hpgl", ".hh": "text/xh", ".hlb": "text/x-script", ".hlp": "application/hlp", ".hpg": "application/vndhp-hpgl", ".hpgl": "application/vndhp-hpgl", ".hqx": "application/binhex", ".hta": "application/hta", ".htc": "text/x-component", ".htm": "text/html", ".html": "text/html", ".htmls": "text/html", ".htt": "text/webviewhtml", ".htx": "text/html", ".ice": "x-conference/x-cooltalk", ".ico": "image/x-icon", ".ics": "text/calendar", ".icz": "text/calendar", ".idc": "text/plain", ".ief": "image/ief", ".iefs": "image/ief", ".iges": "application/iges", ".igs": "application/iges", ".ima": "application/x-ima", ".imap": "application/x-httpd-imap", ".inf": "application/inf", ".ins": "application/x-internett-signup", ".ip": "application/x-ip2", ".isu": "video/x-isvideo", ".it": "audio/it", ".iv": "application/x-inventor", ".ivr": "i-world/i-vrml", ".ivy": "application/x-livescreen", ".jam": "audio/x-jam", ".jav": "text/x-java-source", ".java": "text/x-java-source", ".jcm": "application/x-java-commerce", ".jfif-tbnl": "image/jpeg", ".jfif": "image/jpeg", ".jnlp": "application/x-java-jnlp-file", ".jpe": "image/jpeg", ".jpeg": "image/jpeg", ".jpg": "image/jpeg", ".jps": "image/x-jps", ".js": "application/javascript", ".json": "application/json", ".jut": "image/jutvision", ".kar": "audio/midi", ".karbon": "application/vnd.kde.karbon", ".kfo": "application/vnd.kde.kformula", ".flw": "application/vnd.kde.kivio", ".kml": "application/vnd.google-earth.kml+xml", ".kmz": "application/vnd.google-earth.kmz", ".kon": "application/vnd.kde.kontour", ".kpr": "application/vnd.kde.kpresenter", ".kpt": "application/vnd.kde.kpresenter", ".ksp": "application/vnd.kde.kspread", ".kwd": "application/vnd.kde.kword", ".kwt": "application/vnd.kde.kword", ".ksh": "text/x-scriptksh", ".la": "audio/nspaudio", ".lam": "audio/x-liveaudio", ".latex": "application/x-latex", ".lha": "application/lha", ".lhx": "application/octet-stream", ".list": "text/plain", ".lma": "audio/nspaudio", ".log": "text/plain", ".lsp": "text/x-scriptlisp", ".lst": "text/plain", ".lsx": "text/x-la-asf", ".ltx": "application/x-latex", ".lzh": "application/octet-stream", ".lzx": "application/lzx", ".m1v": "video/mpeg", ".m2a": "audio/mpeg", ".m2v": "video/mpeg", ".m3u": "audio/x-mpegurl", ".m": "text/xm", ".man": "application/x-troff-man", ".manifest": "text/cache-manifest", ".map": "application/x-navimap", ".mar": "text/plain", ".mbd": "application/mbedlet", ".mc$": "application/x-magic-cap-package-10", ".mcd": "application/mcad", ".mcf": "text/mcf", ".mcp": "application/netmc", ".me": "application/x-troff-me", ".mht": "message/rfc822", ".mhtml": "message/rfc822", ".mid": "application/x-midi", ".midi": "application/x-midi", ".mif": "application/x-frame", ".mime": "message/rfc822", ".mjf": "audio/x-vndaudioexplosionmjuicemediafile", ".mjpg": "video/x-motion-jpeg", ".mm": "application/base64", ".mme": "application/base64", ".mod": "audio/mod", ".moov": "video/quicktime", ".mov": "video/quicktime", ".movie": "video/x-sgi-movie", ".mp2": "audio/mpeg", ".mp3": "audio/mpeg3", ".mp4": "video/mp4", ".mpa": "audio/mpeg", ".mpc": "application/x-project", ".mpe": "video/mpeg", ".mpeg": "video/mpeg", ".mpg": "video/mpeg", ".mpga": "audio/mpeg", ".mpp": "application/vndms-project", ".mpt": "application/x-project", ".mpv": "application/x-project", ".mpx": "application/x-project", ".mrc": "application/marc", ".ms": "application/x-troff-ms", ".mv": "video/x-sgi-movie", ".my": "audio/make", ".mzz": "application/x-vndaudioexplosionmzz", ".nap": "image/naplps", ".naplps": "image/naplps", ".nc": "application/x-netcdf", ".ncm": "application/vndnokiaconfiguration-message", ".nif": "image/x-niff", ".niff": "image/x-niff", ".nix": "application/x-mix-transfer", ".nsc": "application/x-conference", ".nvd": "application/x-navidoc", ".o": "application/octet-stream", ".oda": "application/oda", ".odb": "application/vnd.oasis.opendocument.database", ".odc": "application/vnd.oasis.opendocument.chart", ".odf": "application/vnd.oasis.opendocument.formula", ".odg": "application/vnd.oasis.opendocument.graphics", ".odi": "application/vnd.oasis.opendocument.image", ".odm": "application/vnd.oasis.opendocument.text-master", ".odp": "application/vnd.oasis.opendocument.presentation", ".ods": "application/vnd.oasis.opendocument.spreadsheet", ".odt": "application/vnd.oasis.opendocument.text", ".oga": "audio/ogg", ".ogg": "audio/ogg", ".ogv": "video/ogg", ".omc": "application/x-omc", ".omcd": "application/x-omcdatamaker", ".omcr": "application/x-omcregerator", ".otc": "application/vnd.oasis.opendocument.chart-template", ".otf": "application/vnd.oasis.opendocument.formula-template", ".otg": "application/vnd.oasis.opendocument.graphics-template", ".oth": "application/vnd.oasis.opendocument.text-web", ".oti": "application/vnd.oasis.opendocument.image-template", ".otm": "application/vnd.oasis.opendocument.text-master", ".otp": "application/vnd.oasis.opendocument.presentation-template", ".ots": "application/vnd.oasis.opendocument.spreadsheet-template", ".ott": "application/vnd.oasis.opendocument.text-template", ".p10": "application/pkcs10", ".p12": "application/pkcs-12", ".p7a": "application/x-pkcs7-signature", ".p7c": "application/pkcs7-mime", ".p7m": "application/pkcs7-mime", ".p7r": "application/x-pkcs7-certreqresp", ".p7s": "application/pkcs7-signature", ".p": "text/x-pascal", ".part": "application/pro_eng", ".pas": "text/pascal", ".pbm": "image/x-portable-bitmap", ".pcl": "application/vndhp-pcl", ".pct": "image/x-pict", ".pcx": "image/x-pcx", ".pdb": "chemical/x-pdb", ".pdf": "application/pdf", ".pfunk": "audio/make", ".pgm": "image/x-portable-graymap", ".pic": "image/pict", ".pict": "image/pict", ".pkg": "application/x-newton-compatible-pkg", ".pko": "application/vndms-pkipko", ".pl": "text/x-scriptperl", ".plx": "application/x-pixclscript", ".pm4": "application/x-pagemaker", ".pm5": "application/x-pagemaker", ".pm": "text/x-scriptperl-module", ".png": "image/png", ".pnm": "application/x-portable-anymap", ".pot": "application/mspowerpoint", ".pov": "model/x-pov", ".ppa": "application/vndms-powerpoint", ".ppm": "image/x-portable-pixmap", ".pps": "application/mspowerpoint", ".ppt": "application/mspowerpoint", ".ppz": "application/mspowerpoint", ".pre": "application/x-freelance", ".prt": "application/pro_eng", ".ps": "application/postscript", ".psd": "application/octet-stream", ".pvu": "paleovu/x-pv", ".pwz": "application/vndms-powerpoint", ".py": "text/x-scriptphyton", ".pyc": "application/x-bytecodepython", ".qcp": "audio/vndqcelp", ".qd3": "x-world/x-3dmf", ".qd3d": "x-world/x-3dmf", ".qif": "image/x-quicktime", ".qt": "video/quicktime", ".qtc": "video/x-qtc", ".qti": "image/x-quicktime", ".qtif": "image/x-quicktime", ".ra": "audio/x-pn-realaudio", ".ram": "audio/x-pn-realaudio", ".rar": "application/x-rar-compressed", ".ras": "application/x-cmu-raster", ".rast": "image/cmu-raster", ".rexx": "text/x-scriptrexx", ".rf": "image/vndrn-realflash", ".rgb": "image/x-rgb", ".rm": "application/vndrn-realmedia", ".rmi": "audio/mid", ".rmm": "audio/x-pn-realaudio", ".rmp": "audio/x-pn-realaudio", ".rng": "application/ringing-tones", ".rnx": "application/vndrn-realplayer", ".roff": "application/x-troff", ".rp": "image/vndrn-realpix", ".rpm": "audio/x-pn-realaudio-plugin", ".rt": "text/vndrn-realtext", ".rtf": "text/richtext", ".rtx": "text/richtext", ".rv": "video/vndrn-realvideo", ".s": "text/x-asm", ".s3m": "audio/s3m", ".s7z": "application/x-7z-compressed", ".saveme": "application/octet-stream", ".sbk": "application/x-tbook", ".scm": "text/x-scriptscheme", ".sdml": "text/plain", ".sdp": "application/sdp", ".sdr": "application/sounder", ".sea": "application/sea", ".set": "application/set", ".sgm": "text/x-sgml", ".sgml": "text/x-sgml", ".sh": "text/x-scriptsh", ".shar": "application/x-bsh", ".shtml": "text/x-server-parsed-html", ".sid": "audio/x-psid", ".skd": "application/x-koan", ".skm": "application/x-koan", ".skp": "application/x-koan", ".skt": "application/x-koan", ".sit": "application/x-stuffit", ".sitx": "application/x-stuffitx", ".sl": "application/x-seelogo", ".smi": "application/smil", ".smil": "application/smil", ".snd": "audio/basic", ".sol": "application/solids", ".spc": "text/x-speech", ".spl": "application/futuresplash", ".spr": "application/x-sprite", ".sprite": "application/x-sprite", ".spx": "audio/ogg", ".src": "application/x-wais-source", ".ssi": "text/x-server-parsed-html", ".ssm": "application/streamingmedia", ".sst": "application/vndms-pkicertstore", ".step": "application/step", ".stl": "application/sla", ".stp": "application/step", ".sv4cpio": "application/x-sv4cpio", ".sv4crc": "application/x-sv4crc", ".svf": "image/vnddwg", ".svg": "image/svg+xml", ".svr": "application/x-world", ".swf": "application/x-shockwave-flash", ".t": "application/x-troff", ".talk": "text/x-speech", ".tar": "application/x-tar", ".tbk": "application/toolbook", ".tcl": "text/x-scripttcl", ".tcsh": "text/x-scripttcsh", ".tex": "application/x-tex", ".texi": "application/x-texinfo", ".texinfo": "application/x-texinfo", ".text": "text/plain", ".tgz": "application/gnutar", ".tif": "image/tiff", ".tiff": "image/tiff", ".tr": "application/x-troff", ".tsi": "audio/tsp-audio", ".tsp": "application/dsptype", ".tsv": "text/tab-separated-values", ".turbot": "image/florian", ".txt": "text/plain", ".uil": "text/x-uil", ".uni": "text/uri-list", ".unis": "text/uri-list", ".unv": "application/i-deas", ".uri": "text/uri-list", ".uris": "text/uri-list", ".ustar": "application/x-ustar", ".uu": "text/x-uuencode", ".uue": "text/x-uuencode", ".vcd": "application/x-cdlink", ".vcf": "text/x-vcard", ".vcard": "text/x-vcard", ".vcs": "text/x-vcalendar", ".vda": "application/vda", ".vdo": "video/vdo", ".vew": "application/groupwise", ".viv": "video/vivo", ".vivo": "video/vivo", ".vmd": "application/vocaltec-media-desc", ".vmf": "application/vocaltec-media-file", ".voc": "audio/voc", ".vos": "video/vosaic", ".vox": "audio/voxware", ".vqe": "audio/x-twinvq-plugin", ".vqf": "audio/x-twinvq", ".vql": "audio/x-twinvq-plugin", ".vrml": "application/x-vrml", ".vrt": "x-world/x-vrt", ".vsd": "application/x-visio", ".vst": "application/x-visio", ".vsw": "application/x-visio", ".w60": "application/wordperfect60", ".w61": "application/wordperfect61", ".w6w": "application/msword", ".wav": "audio/wav", ".wb1": "application/x-qpro", ".wbmp": "image/vnd.wap.wbmp", ".web": "application/vndxara", ".wiz": "application/msword", ".wk1": "application/x-123", ".wmf": "windows/metafile", ".wml": "text/vnd.wap.wml", ".wmlc": "application/vnd.wap.wmlc", ".wmls": "text/vnd.wap.wmlscript", ".wmlsc": "application/vnd.wap.wmlscriptc", ".word": "application/msword", ".wp5": "application/wordperfect", ".wp6": "application/wordperfect", ".wp": "application/wordperfect", ".wpd": "application/wordperfect", ".wq1": "application/x-lotus", ".wri": "application/mswrite", ".wrl": "application/x-world", ".wrz": "model/vrml", ".wsc": "text/scriplet", ".wsrc": "application/x-wais-source", ".wtk": "application/x-wintalk", ".x-png": "image/png", ".xbm": "image/x-xbitmap", ".xdr": "video/x-amt-demorun", ".xgz": "xgl/drawing", ".xif": "image/vndxiff", ".xl": "application/excel", ".xla": "application/excel", ".xlb": "application/excel", ".xlc": "application/excel", ".xld": "application/excel", ".xlk": "application/excel", ".xll": "application/excel", ".xlm": "application/excel", ".xls": "application/excel", ".xlt": "application/excel", ".xlv": "application/excel", ".xlw": "application/excel", ".xm": "audio/xm", ".xml": "text/xml", ".xmz": "xgl/movie", ".xpix": "application/x-vndls-xpix", ".xpm": "image/x-xpixmap", ".xsr": "video/x-amt-showrun", ".xwd": "image/x-xwd", ".xyz": "chemical/x-pdb", ".z": "application/x-compress", ".zip": "application/zip", ".zoo": "application/octet-stream", ".zsh": "text/x-scriptzsh", ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", ".docm": "application/vnd.ms-word.document.macroEnabled.12", ".dotx": "application/vnd.openxmlformats-officedocument.wordprocessingml.template", ".dotm": "application/vnd.ms-word.template.macroEnabled.12", ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ".xlsm": "application/vnd.ms-excel.sheet.macroEnabled.12", ".xltx": "application/vnd.openxmlformats-officedocument.spreadsheetml.template", ".xltm": "application/vnd.ms-excel.template.macroEnabled.12", ".xlsb": "application/vnd.ms-excel.sheet.binary.macroEnabled.12", ".xlam": "application/vnd.ms-excel.addin.macroEnabled.12", ".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation", ".pptm": "application/vnd.ms-powerpoint.presentation.macroEnabled.12", ".ppsx": "application/vnd.openxmlformats-officedocument.presentationml.slideshow", ".ppsm": "application/vnd.ms-powerpoint.slideshow.macroEnabled.12", ".potx": "application/vnd.openxmlformats-officedocument.presentationml.template", ".potm": "application/vnd.ms-powerpoint.template.macroEnabled.12", ".ppam": "application/vnd.ms-powerpoint.addin.macroEnabled.12", ".sldx": "application/vnd.openxmlformats-officedocument.presentationml.slide", ".sldm": "application/vnd.ms-powerpoint.slide.macroEnabled.12", ".thmx": "application/vnd.ms-officetheme", ".onetoc": "application/onenote", ".onetoc2": "application/onenote", ".onetmp": "application/onenote", ".onepkg": "application/onenote", ".xpi": "application/x-xpinstall", } func init() { for ext, typ := range types { // skip errors mime.AddExtensionType(ext, typ) } } // typeByExtension returns the MIME type associated with the file extension ext. // The extension ext should begin with a leading dot, as in ".html". // When ext has no associated type, typeByExtension returns "". // // Extensions are looked up first case-sensitively, then case-insensitively. // // The built-in table is small but on unix it is augmented by the local // system's mime.types file(s) if available under one or more of these // names: // // /etc/mime.types // /etc/apache2/mime.types // /etc/apache/mime.types // // On Windows, MIME types are extracted from the registry. // // Text types have the charset parameter set to "utf-8" by default. func TypeByExtension(fullfilename string) string { ext := filepath.Ext(fullfilename) typ := mime.TypeByExtension(ext) // mime.TypeByExtension returns as text/plain; | charset=utf-8 the static .js (not always) if ext == ".js" && (typ == "text/plain" || typ == "text/plain; charset=utf-8") { if ext == ".js" { typ = "application/javascript" } } return typ } 

希望帮助你和其他用户,如果你有更多的问题,请不要犹豫再发帖!

这里是另一个例子 – https://github.com/alok87/gobyexample/blob/master/init/init.go

 package main import ( "fmt" ) func callOut() int { fmt.Println("Outside is beinge executed") return 1 } var test = callOut() func init() { fmt.Println("Init3 is being executed") } func init() { fmt.Println("Init is being executed") } func init() { fmt.Println("Init2 is being executed") } func main() { fmt.Println("Do your thing !") } 

上述程序的输出

 $ go run init/init.go Outside is being executed Init3 is being executed Init is being executed Init2 is being executed Do your thing ! 

https://golang.org/ref/mem#tmp_4

程序初始化在一个goroutine中运行,但是goroutine可以创build其他goroutine,并行运行。

如果一个软件包p导入软件包q,那么q的init函数的完成发生在任何p的开始之前。

所有初始化函数完成后,函数main.main的开始会发生。

init func先运行然后运行main。 它用于在程序运行之前先设置一些东西,例如:

访问模板,使用所有内核运行程序,检查Goos和拱等…

init会随处调用它的包(不pipe是空白导入还是导入),但只有一次。

这是一个包:

 package demo import ( "some/logs" ) var count int func init() { logs.Debug(count) } // Do do func Do() { logs.Debug("dd") } 

任何包(主包或任何testing包)将其导入为空白:

 _ "jawave.com/we-pm/models/demo" 

或者用它来导入它func:

 "jawave.com/we-pm/models/demo" func someFunc(){ demo.Do() } 

init将只logging一次。 第一个使用它的包,它的init func将在包的初始化之前运行。 所以:

A调用B,B调用C,它们都有init func,C的init将在B之前运行,B在A之前运行。