আমি গো-তে একটি ছোট স্বতন্ত্র ওয়েব অ্যাপ্লিকেশন তৈরি করতে চেয়েছিলাম, একটি নিয়মিত ওয়েব অ্যাপ্লিকেশনের বিপরীত যেখানে সম্পদগুলি আলাদাভাবে একটি CDN বা HTTP সার্ভার যেমন Nginx এর মাধ্যমে পরিবেশন করা হবে। যাইহোক, যদি কর্মক্ষমতা একটি সমালোচনামূলক উদ্বেগ না হয় বা অ্যাপ্লিকেশনটি কম ট্রাফিকের জন্য উদ্দেশ্যে করা হয়, একটি স্বতন্ত্র অ্যাপ্লিকেশন ব্যবহার করে স্থাপনা এবং বিতরণ সহজ করে কারণ এটি শুধুমাত্র একটি এক্সিকিউটেবল বাইনারি। একটি Go অ্যাপ্লিকেশনে সংস্থান এমবেড করার জন্য বেশ কয়েকটি প্যাকেজ উপলব্ধ: ভাত স্ট্যাটিক বিন্দাতা আমি প্রতিটি লাইব্রেরির সুনির্দিষ্ট বিষয়ে অনুসন্ধান করব না, তবে আমি এর ব্যবহার সহজ এবং সক্রিয় সমর্থনের কারণে পদ্ধতি পছন্দ করি। বিন্ডাটা শুরু হচ্ছে প্রথমে, আপনার প্রজেক্টের ডিরেক্টরির ভিতরে একটি তৈরি করি: frontend/ index.html <html> <body> Hello, World! </body> </html> এখন যেহেতু আমাদের কাছে একটি প্রজেক্ট সেটআপ আছে এবং পরীক্ষা করার জন্য একটি স্ট্যাটিক রিসোর্স আছে, আসুন কমান্ডটি ব্যবহার করে ইনস্টল করি: bindata go get -u github.com/jteeuwen/go-bindata/... আমরা ওয়েব অ্যাপ্লিকেশনের ব্যাকএন্ড কোড চালানোর জন্য প্রস্তুত। একটি ফাইল তৈরি করুন এবং নিম্নলিখিত কোডটি অনুলিপি করুন: main.go package main import ( "bytes" "io" "net/http" ) //go:generate go-bindata -prefix "frontend/" -pkg main -o bindata.go frontend/... func static_handler(rw http.ResponseWriter, req *http.Request) { var path string = req.URL.Path if path == "" { path = "index.html" } if bs, err := Asset(path); err != nil { rw.WriteHeader(http.StatusNotFound) } else { var reader = bytes.NewBuffer(bs) io.Copy(rw, reader) } } func main() { http.Handle("/", http.StripPrefix("/", http.HandlerFunc(static_handler))) http.ListenAndServe(":3000", nil) } এই কোডে গুরুত্বপূর্ণ লাইন: //go:generate go-bindata -prefix "frontend/" -pkg main -o bindata.go frontend/... উপরের লাইনটি আমাদেরকে কমান্ড চালানোর অনুমতি দেয় যখন বলা হয়। সংস্করণ 1.4 অনুযায়ী, আপনি প্রজন্মের পর্যায়ে কাস্টম কমান্ড চালাতে পারেন। এটি আপনার গো ফাইলে যোগ করার বিষয় মাত্র। go-bindata go generate //go:generate command argument... কমান্ড লাইনে বেশ কয়েকটি পরামিতি রয়েছে, তাই এটি কীভাবে ব্যবহার করবেন তার পরীক্ষা করুন। আমাদের ক্ষেত্রে, আমরা বলি: go-bindata ডকুমেন্টেশন স্ট্যাটিক এর জন্য পাথনামের অংশ সংজ্ঞায়িত করে -prefix "frontend/" জেনারেট করা কোডে ব্যবহৃত প্যাকেজের নামটি সংজ্ঞায়িত করে -pkg main জেনারেট করা ফাইলের নাম নির্ধারণ করুন -o bindata.go কমান্ডটি চালানোর পরে, আপনি নামে একটি জেনারেট করা ফাইল দেখতে পাবেন। আপনার প্রকল্পের গঠন এই মত হওয়া উচিত: go generate bindata.go . │ ├── bindata.go (auto-generated file) ├── frontend │ └── index.html └── main.go স্ট্যাটিক ফাইল পরিবেশন করার যুক্তি হল ফাংশনে, যা অনুরোধটি গ্রহণ করে এবং পাথটি স্ট্যাটিক পাথের সাথে মেলে কিনা তা পরীক্ষা করে। চেক ফাংশন ব্যবহার করে সম্পন্ন করা হয়, স্বয়ংক্রিয়ভাবে ব্যবহারকারী দ্বারা রপ্তানি করা হয়। যদি সংস্থানটি বিদ্যমান না থাকে, আমরা একটি ফেরত দিই, অন্যথায়, আমরা সম্পদের বিষয়বস্তু ফেরত দিই। static_handler Asset bindata.go 404 বাকি কোডটি হল ওয়েব অ্যাপ্লিকেশন তৈরি করার জন্য এবং আমাদের টেমপ্লেটকে আবদ্ধ করার জন্য এর জন্য সমস্ত আগত অনুরোধের সাথে মেলে। এই কোডটি বুঝতে আপনার সমস্যা হলে, জন্য অফিসিয়াল Go দেখুন। static_handler / http package ডকুমেন্টেশন গো কীভাবে প্যাকেজগুলি পরিচালনা করে তার একটি দ্রুত অনুস্মারক হিসাবে, শনাক্তকারীর নামের প্রথম অক্ষরটি বড় অক্ষর দিয়ে শুরু হলে সমস্ত শনাক্তকারী স্বয়ংক্রিয়ভাবে একই নামের অন্যান্য প্যাকেজে রপ্তানি হবে৷ এই নিয়মের উপর ভিত্তি করে, ফাইলটি প্যাকেজের জন্য ফাংশন প্রদান করে। এটি প্রদত্ত নামের জন্য একটি সম্পদ লোড করে এবং ফেরত দেয়। রিসোর্স পাওয়া না গেলে বা লোড করা না গেলে এটি একটি ত্রুটি প্রদান করে। bindata.go main Asset