Init () ফাংশনটি কখন চালিত হয়?


356

আমি init()গো ফাংশনটি কী করে তার সুনির্দিষ্ট ব্যাখ্যা খোঁজার চেষ্টা করেছি । ইফেক্টিভ গো কী বলে আমি তা পড়েছি তবে এটি কী বলে তা যদি আমি পুরোপুরি বুঝতে পারি তবে আমি নিশ্চিত নই। আমি অনিশ্চিত সঠিক বাক্যটি হ'ল:

এবং শেষ অবধি অবশেষে: প্যাকেজের সমস্ত পরিবর্তনশীল ঘোষণাপত্রগুলি তাদের আরম্ভকারীদের মূল্যায়ন করার পরে আরআইকে বলা হয় এবং সমস্ত আমদানিকৃত প্যাকেজগুলি আরম্ভ করার পরে সেগুলি মূল্যায়ন করা হয়।

কী all the variable declarations in the package have evaluated their initializersমানে? এর অর্থ কি যদি আপনি কোনও প্যাকেজ এবং তার ফাইলগুলিতে "গ্লোবাল" ভেরিয়েবলগুলি ঘোষণা করেন, সেগুলির সমস্ত মূল্যায়ন না করা অবধি init () চলবে না এবং তারপরে এটি / সমস্ত মেইল ​​() যখন /।

আমি মার্ক সামারফিল্ডের গো বইটি নিম্নলিখিতটি পড়েছি:

যদি কোনও প্যাকেজের এক বা একাধিক init () ফাংশন থাকে তবে মূল প্যাকেজের মূল () ফাংশন বলার আগে সেগুলি স্বয়ংক্রিয়ভাবে কার্যকর করা হয়।

আমার বোধগম্যতা অনুসারে, init()আপনি যখন মূল () চালানোর ইচ্ছা চালাচ্ছেন কেবল তখনই কি প্রাসঙ্গিক? বা প্রধান প্যাকেজ। যে কেউ আরও সুনির্দিষ্টভাবে init()আমাকে সংশোধন করতে নির্দ্বিধায় বুঝতে পারে

উত্তর:


434

হ্যাঁ ধরে নিচ্ছি আপনার কাছে এটি রয়েছে :

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()সর্বদা বলা হয়, প্রধান বা না থাকুক না কেন, তাই যদি আপনি কোনও প্যাকেজ আমদানি করেন যা কোনও initফাংশন রয়েছে, এটি কার্যকর করা হবে।

অতিরিক্তভাবে, আপনার init()প্যাকেজ প্রতি একাধিক ফাংশন থাকতে পারে ; তারা ফাইলটিতে প্রদর্শিত ক্রমে কার্যকর করা হবে (সমস্ত পরিবর্তনশীল অবশ্যই শুরু করার পরে)। যদি তারা একাধিক ফাইল বিস্তৃত করে থাকে তবে এগুলি লেক্সিকাল ফাইলের নাম ক্রমে কার্যকর করা হবে ( @ বেঙ্ক দ্বারা নির্দেশিত ):

দেখে মনে হচ্ছে যে init()ফাংশনগুলি লেক্সিকাল ফাইলের নাম ক্রমে সম্পাদিত হয়। গো স্পেক বলছে "বিল্ড সিস্টেমগুলি একই প্যাকেজভুক্ত একাধিক ফাইলকে সংক্ষিপ্ত ফাইল নাম ক্রমের সাথে সংকলককে উপস্থাপন করতে উত্সাহিত করা হয়"। মনে হচ্ছে এটি এইভাবে go buildকাজ করে।


অভ্যন্তরীণ গো প্যাকেজগুলির অনেকগুলি init()টেবিলগুলি শুরু করতে ব্যবহার করে এবং যেমন, https://github.com/golang/go/blob/883bc6/src/compress/bzip2/bzip2.go#L480


1
init()আমি প্রতি প্যাকেজ জিনিস, আমার মনে হয় ... সুতরাং, এর অর্থ কি এই যে যদি বিভিন্ন ফাইলগুলির নিজস্ব থাকে initsতবে মূল () চালানোর আগে সমস্ত চিহ্নগুলি সর্বদা সঠিকভাবে চালিত হয়? আপনি কি আমার জন্য একটি বিষয় স্পষ্ট করে বলতে পারেন, কেন আপনি একটি মেইন ছাড়াই একটি দীক্ষা () রাখবেন এবং কীভাবে এটি কাজ করে? এর অর্থ কি প্যাকেজটি আমদানি করার আগে থিম () শেষ জিনিসটি চালানো হয়েছিল? অন্যথায়, যদি এটি আমদানি না করা হয় এবং কোনও প্রধান না থাকে তবে প্রোগ্রামটি কখনও কার্যকর হবে না ... তাই না? (এটির পরীক্ষার ফাইল না হলে আমার ধারণা ...)
পিনোকিও

4
প্যাকেজটি ছাড়াই init চালানোর অনেকগুলি কারণ রয়েছে main, উদাহরণস্বরূপ যদি আপনাকে বেশ কয়েকটি ভেরিয়েবল শুরু করতে হয় বা কিছু ফাইল লোড করতে হয় বা এক-সময়-গণনা করতে হয়। এখন যদি আপনার পুরো প্রোগ্রামটি এমন একটি প্যাকেজ হয় যা সত্যই প্রয়োজন হয় না তবে এটি যদি একাধিক প্যাকেজ হয় তবে তাদের কয়েকটিতে এটি নির্দিষ্ট করে কিছু সূচনা করার প্রয়োজন হতে পারে।
ওয়ানঅফনে

4
@ পিনোচিও আপনি যখন কোনও গো প্রোগ্রাম পরিচালনা করেন তখন সর্বদা একটি (এবং শুধুমাত্র একটি) প্রধান () থাকবে। আর init () ফাংশনগুলি একটি প্রধান () পূর্বে পরিচালিত হয়। তবে সমস্ত প্যাকেজগুলির একটি প্রধান () প্রয়োজন হয় না। উদাহরণস্বরূপ, যদি আপনি কোনও ডাটাবেসে সংযোগের জন্য ইউটিলিটি ফাংশনগুলির সাথে একটি পুনরায় ব্যবহারযোগ্য প্যাকেজ তৈরি করছেন তবে সেই প্যাকেজের কোনও প্রধান () থাকা উচিত নয়। তবে এটির একটি init () থাকতে পারে। আপনি যখন কোনও প্রোগ্রামে সেই ডাটাবেস প্যাকেজটি ব্যবহার করেন, তবে প্রোগ্রামটির একটি প্রধান () থাকবে।
সংখ্যা

একটি ভাল চিত্রণ initযেমন কোবরা কমান্ডারের মতো প্লাগযোগ্য আর্কিটেকচারের সাথে । initউদাহরণগুলিতে কীভাবে রেফারেন্স করা হয়েছে তা লক্ষ্য করুন
ড্যান এস্পারজা

1
@OneOfOne কয়েক পরীক্ষার পরে, দেখে মনে হচ্ছে যে init () ফাংশনগুলি লেক্সিকাল ফাইলের নাম ক্রমে কার্যকর করা হয়েছে। যান বৈশিষ্ট বলে "বিল্ড সিস্টেম উপস্থিত একাধিক একটি কম্পাইলার আভিধানিক ফাইলের নাম অনুক্রমে একই প্যাকেজ একাত্মতার ফাইল করার পরামর্শ দেওয়া হয়"। দেখে মনে হয় যে গো বিল্ড এইভাবে কাজ করে।
বেঞ্চ

221

এই ছবিটি দেখুন। :)

import --> const --> var --> init()

  1. যদি কোনও প্যাকেজ অন্যান্য প্যাকেজ আমদানি করে, আমদানি করা প্যাকেজগুলি প্রথমে শুরু করা হয়।

  2. বর্তমান প্যাকেজটির ধ্রুবকটি তখন শুরু হয়।

  3. বর্তমান প্যাকেজের ভেরিয়েবলগুলি তখন আরম্ভ করা হয়।

  4. অবশেষে, init()বর্তমান প্যাকেজের ফাংশন বলা হয়।

একটি প্যাকেজের একাধিক init ফাংশন থাকতে পারে (হয় একক ফাইলে বা একাধিক ফাইল জুড়ে বিতরণ করা হয়) এবং সেগুলি সংকলকটিতে উপস্থাপন করা হয় সেই ক্রমে তাকে ডাকা হয়।


কোনও প্যাকেজ একাধিক প্যাকেজ থেকে আমদানি করা হলেও একবার শুরু করা হবে।


3
এর জন্য ধন্যবাদ. কিছু পাঠ্য যুক্ত করা এই চিত্রটিতে অর্থবোধ করে।
বালাজী বোগগ্রাম রমনারায়ণ

1
আমি এতটা নিশ্চিত নই যে আমরা বলতে পারি ধ্রুবকগুলি তখন আরম্ভ করা হয়েছিল। তারা সংকলন সময়ে জানা হবে বলে আশা করা হচ্ছে, তাই না?
অ্যালেক্সিস উইল্ক

এর জন্য ধন্যবাদ, এই চিত্রটি আমাকে একটি বড় নির্মাণ সমস্যা সমাধানে সহায়তা করেছে, তবে আমি কি জিজ্ঞাসা করতে পারি এই চিত্রের উত্সটি কোথায়?
কোরেড লরেন্স ওলুওফেমি

1
@ কোরেডলওরেন্স ওলুওয়েফিমি চিত্রের লিঙ্কটি দেখুন আপনি এটি দেখতে পাবেন যে এটি একটি চীনা গো প্রচারক গিথুব
আস্টাক্সির

26

এটিতে যুক্ত করার মতো কিছু (যা আমি একটি মন্তব্য হিসাবে যুক্ত করব তবে এই পোস্টটি লেখার সময় আমি যথেষ্ট খ্যাতি পাচ্ছিলাম না)

একই প্যাকেজে একাধিক উপার্জন থাকা সত্ত্বেও তারা কোন ক্রমে চালিত হবে তা জানার কোনও গ্যারান্টিযুক্ত উপায় আমি এখনও খুঁজে পাইনি। উদাহরণস্বরূপ আমার আছে:

package config
    - config.go
    - router.go

উভয়ই রয়েছে config.goএবং router.goএতে init()ফাংশন রয়েছে, তবে চলার সময় router.goফাংশনটি প্রথমে ছুটে যায় (যার ফলে আমার অ্যাপ্লিকেশন আতঙ্কিত হয়েছিল)

আপনি যদি এমন এক পরিস্থিতিতে থাকেন যেখানে আপনার একাধিক ফাইল রয়েছে, তার নিজস্ব init()ক্রিয়াকলাপের সাথে প্রত্যেকটি খুব সচেতন হন যে আপনি অন্যটির আগে একটি পাওয়ার নিশ্চয়তা নন। ওয়ানটোন যেমন তার উদাহরণে দেখায় তেমন একটি ভেরিয়েবল অ্যাসাইনমেন্ট ব্যবহার করা ভাল । সেরা অংশটি হ'ল: এই পরিবর্তনশীল ঘোষণাটি 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)
        }
    }
}

এটি var ConfigSuccess = configureApplication()উপস্থিত কিনা router.goবা তা নির্বিশেষে config.goএটি EITHER চালানোর আগে init()চালানো হবে।


3
কেবলমাত্র আমার দুটি সেন্ট: আপনি জটিল (প্যানিক উত্থাপন) আরম্ভ থেকে "সরল আরম্ভ" আলাদা করতে পারেন। আপনি যদি init () এ ঘাবড়াচ্ছেন তবে আপনি মূল প্রোগ্রামটিতে কোনও সুযোগ দিচ্ছেন না। বেসিক স্টাফগুলির জন্য (আতঙ্ক ছাড়াই) ফানক থ্রি () রেখে func initialize|loadConfig|connectআলাদা হতে পারে func init। এই পৃথকীকরণটি আর ডি অর্ডার নিশ্চিত করতে হ্যাকের প্রয়োজনীয়তাও সরিয়ে দেয়। আশা করি সহায়ক হবেন।
লুসিও এম। টাটো

3
ভাষা স্পেসিফিকেশন থেকে উদ্ধৃতি: কোনও আমদানি ছাড়াই একটি প্যাকেজটি তার সমস্ত প্যাকেজ-স্তর ভেরিয়েবলগুলিকে প্রাথমিক মানগুলি অর্পণ করে শুরু করা হয় যার পরে উত্সে প্রদর্শিত ক্রম হিসাবে সমস্ত প্রাথমিক ফাংশন কল করা হয়, সম্ভবত একাধিক ফাইলে সংকলককে উপস্থাপন করা হয়। পুনরুত্পাদনযোগ্য আরম্ভের আচরণটি নিশ্চিত করতে, বিল্ড সিস্টেমগুলি একই প্যাকেজভুক্ত একাধিক ফাইলগুলি সংক্ষিপ্ত ফাইলের নাম ক্রমে সংকলককে উপস্থাপন করতে উত্সাহিত করা হয়।
আপডেটগ্লিউ

1
আমার অ্যাপ্লিকেশনটিতে আমি যে দুর্ভাগ্যজনক বিষয়টির মুখোমুখি হয়েছি তা হ'ল এটি লেক্সিকাল ক্রমে আর ডি ফাংশনগুলি কার্যকর করে না। এটি সম্ভবত একটি সংকলক বাগ হতে পারে যা ঠিক করা হয়েছে। আমি এ সম্পর্কিত কোনও সমস্যা আছে কিনা তা যাচাই করতে বিরক্ত করিনি।
রিফ্লক

1
উপরে আপডেটোগ্লিউ থেকে গুরুত্বপূর্ণ মন্তব্য। আমদানির সাথে জড়িত থাকার সময় এটি সত্য বলে মনে হয় না। এখানে এমন একটি মামলা চলছে যেখানে আমার পরীক্ষা রয়েছে যা একাধিক আমদানিকৃত প্যাকেজগুলির উপর নির্ভর করে। এবং প্যাকেজ-স্তরের ভেরিয়েবলগুলি ব্যবহারের কৌশলটি আমার পরিবর্তনশীল নির্ধারিত ফাংশনের আগে চালিত নির্ভরশীল প্যাকেজগুলির উপর init () পদ্ধতিগুলি রোধ করতে সহায়তা করে না।
uncrase

1
init()একক প্যাকেজের মধ্যে কলগুলির ক্রম সংক্রমণের মধ্যে কীভাবে খাওয়ানো হয় তার দ্বারা নির্ধারিত হয়; goটুল আদেশ বর্ণানুক্রমে ফাইল। তারপরে, একক ফাইলের মধ্যে সেগুলি সিনট্যাক্টিক ক্রমে সূচনা করা হয়। শব্দ চয়ন করার জন্য সম্পাদিত
আদিত্যজোন

8

এখানে অন্য উদাহরণ - 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 !

4

উদাহরণস্বরূপ একটি ফ্রেমওয়ার্ক বা একটি গ্রন্থাগার নিন যা আপনি অন্যান্য ব্যবহারকারীদের জন্য ডিজাইন করছেন, এই ব্যবহারকারীদের শেষ পর্যন্ত main functionতাদের অ্যাপ্লিকেশন সম্পাদন করার জন্য তাদের কোডে একটি থাকবে । যদি ব্যবহারকারী আপনার লাইব্রেরির প্রকল্পের একটি উপ-প্যাকেজ সরাসরি আমদানি করে তবে সেই initসাব-প্যাকেজটির প্রথমে ( একবার ) প্রথমে কল করা হবে। লাইব্রেরির রুট প্যাকেজ ইত্যাদির জন্য একই ...

এমন অনেক সময় রয়েছে যখন আপনি কোনও অস্তিত্ব ছাড়া main funcসরাসরি কোড না করে কোড ব্লক কার্যকর করতে চান

আপনি যদি কল্পিত লাইব্রেরির বিকাশকারী হিসাবে আপনার লাইব্রেরির উপ-প্যাকেজটির কোনও initফাংশন আমদানি করেন তবে এটি প্রথমে এবং একবার ডাকা হবে , আপনার কোনও নেইmain func তবে আপনার কিছু ভেরিয়েবল বা একটি সারণী নিশ্চিত করতে হবে, অন্যান্য ফাংশনগুলির কল করার আগেই আরম্ভ করা হবে।

একটি ভাল জিনিস মনে রাখা এবং সম্পর্কে চিন্তা করতে হয় যে: সবসময় প্রতি আবেদন একবার চালানো।init

init মৃত্যুদন্ড কার্যকর হয়:

  1. init"কলার" প্যাকেজের কার্যকারিতার ঠিক আগে ,
  2. beforeচ্ছিকভাবে আগে main func ,
  3. তবে প্যাকেজ-স্তরের ভেরিয়েবলগুলির পরে var = [...] or cost = [...],

আপনি যখন কোনও প্যাকেজ আমদানি করেন এটি আদেশের মাধ্যমে এটির সমস্ত init ফাংশন পরিচালনা করবে

আমি একটি init ফাংশন খুব ভাল উদাহরণ দেব। এটি একটি স্ট্যান্ডার্ড গো এর লাইব্রেরিতে মাইম প্রকার যুক্ত করবে mimeএবং প্যাকেজ-স্তরের ফাংশনটি mimeএর initক্রিয়াকলাপে ইতিমধ্যে শুরু করা কাস্টম মাইম প্রকারগুলি পেতে সরাসরি স্ট্যান্ডার্ড প্যাকেজটি ব্যবহার করবে :

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/x-c",
    ".cab":       "application/vnd.ms-cab-compressed",
    ".cat":       "application/vndms-pkiseccat",
    ".cc":        "text/x-c",
    ".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/x-c",
    ".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/x-h",
    ".hdf":       "application/x-hdf",
    ".help":      "application/x-helpfile",
    ".hgl":       "application/vndhp-hpgl",
    ".hh":        "text/x-h",
    ".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/x-m",
    ".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
}

আশা করি এটি আপনাকে এবং অন্যান্য ব্যবহারকারীদের সহায়তা করেছে, আপনার আরও প্রশ্ন থাকলে আবার পোস্ট করতে দ্বিধা করবেন না!


2

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

প্রোগ্রামের সূচনাটি একক গোরোটিনে চলে, তবে সেই গোরোটিন অন্যান্য গোরোটাইন তৈরি করতে পারে যা একই সাথে চলতে পারে।

যদি একটি প্যাকেজ পি প্যাকেজ কি আমদানি করে, p এর কোনও শুরুর আগে q এর init ক্রিয়াকলাপ সমাপ্ত হয়।

ফাংশন মেন.মেনের শুরুটি সমস্ত ডিআইই ফাংশন শেষ হওয়ার পরে ঘটে।


1

init এর প্যাকেজটি সর্বত্র ব্যবহার করা হবে (একেবারে ফাঁকা আমদানি বা আমদানি নয়), তবে কেবলমাত্র একবার।

এটি একটি প্যাকেজ:

package demo

import (
    "some/logs"
)

var count int

func init() {
    logs.Debug(count)
}

// Do do
func Do() {
    logs.Debug("dd")
}

যে কোনও প্যাকেজ (মূল প্যাকেজ বা কোনও পরীক্ষার প্যাকেজ) এটিকে ফাঁকা হিসাবে আমদানি করে:

_ "printfcoder.com/we/models/demo"

বা এটিকে ব্যবহার করে আমদানি করুন:

"printfcoder.com/we/models/demo"

func someFunc(){
   demo.Do()
}

initটি 0কেবল একবারে লগ করবে । এটি ব্যবহার করে প্রথম প্যাকেজটি, এর init মজাদার প্যাকেজের আরম্ভের আগে চলবে। তাই:

একটি কল বি, বি সি কল করে, তাদের সকলেরই দীক্ষা আছে, সি এর দীক্ষা প্রথমে বি এর আগে পরিচালিত হবে, বি এর আগে এ।


1

একটি প্যাকেজ ক্রিয়াকলাপে mutil init ফাংশন:

  1. কনস্ট্যান্ড এবং ভেরিয়েবল সংজ্ঞায়িত ফাইল init () ফাংশন এক্সিকিউট করুন

  2. init ফাংশন ফাইলের নাম asc দ্বারা আদেশ সম্পাদন করে


0

থিম ফানক প্রথমে এবং তারপরে মেইন চালায়। এটি আপনার প্রোগ্রামটি চলার আগে প্রথমে কিছু সেট করার জন্য ব্যবহৃত হয়, উদাহরণস্বরূপ:

কোনও টেমপ্লেট অ্যাক্সেস করা, সমস্ত কোর ব্যবহার করে প্রোগ্রাম চালানো, গু এবং খিলান ইত্যাদি পরীক্ষা করা ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.