Go 1.22 से standard library में बेहतर routing support मिलता है
- पहले routing को मैन्युअली संभालना पड़ता था, लेकिन अब
mux.HandleFunc का उपयोग करके routing को आसानी से किया जा सकता है
- login middleware जोड़कर security को बेहतर बनाया जा सकता है
built-in router में सावधानी: trailing slash के कारण redirect
- अगर
/records/ path बनाया जाए, तो /records request /records/ पर redirect हो जाती है
- इससे POST request की body हट सकती है और request GET में बदल सकती है
- इसका समाधान यह है कि
POST /records/ की जगह POST /records जैसे API endpoint का उपयोग किया जाए
sqlc से database query code का automatic generation
- ORM सीखे बिना SQL query लिखने के लिए sqlc नाम का tool मिला
- SQL query लिखने पर वह अपने-आप Go code में बदल जाती है
- ORM के documentation को देखे बिना भी ज़रूरी SQL queries आसानी से लिखी जा सकती हैं
sqlite optimization tips
- database के लिए write-only object का उपयोग करें और
db.SetMaxOpenConns(1) सेट करें
- read speed बढ़ाने के लिए write और read के लिए अलग-अलग DB objects का उपयोग करें
- जिन दो tables के बीच JOIN की ज़रूरत नहीं है, उन्हें अलग-अलग databases में रखकर स्वतंत्र रूप से connect किया जा सकता है
Go 1.19 में GC memory limit सेट करना
- 256MB या 512MB जैसी अपेक्षाकृत कम memory वाले VM पर सभी Go projects चलाने पर application के बार-बार OOM से बंद होने की समस्या हुई
- garbage collector की default setting के कारण current heap size के 2 गुना तक memory allocation की अनुमति मिलती है
- Go 1.19 में ऐसा तरीका जोड़ा गया कि application किसी खास memory usage तक पहुँचने पर GC चलाने का निर्देश दिया जा सके
- GC memory limit को 250MB पर सेट करने के बाद OOM shutdown की आवृत्ति कम हो गई
export GOMEMLIMIT=250MiB
Go से वेबसाइट बनाने के कारण
- single static binary के रूप में deployment आसान है
- production में उपयोग लायक built-in webserver है, इसलिए WSGI वगैरह configure करने की ज़रूरत नहीं होती
- Go का toolchain install और use करना आसान है
- HTTP response भेजना सरल है, इसलिए project maintenance आसान रहती है
- standard library में
net/http शामिल है, इसलिए अतिरिक्त library install किए बिना वेबसाइट बनाई जा सकती है
- system-level काम भी आसानी से किए जा सकते हैं
- ऐसा लगता है कि सब कुछ project को आसानी से संभालने योग्य बनाने के लिए बनाया गया है
वे समस्याएँ जो अभी तक हल नहीं हुईं
- कुछ चीज़ें हैं जो Go में अभी तक ज़्यादा नहीं की गईं
- HTML template rendering
- असली login system implement करना
- CSRF implement करना
- आम तौर पर security-sensitive features को implement करने का तरीका अच्छी तरह नहीं पता, इसलिए login/CSRF जैसी चीज़ों की ज़रूरत वाले projects शुरू नहीं किए जाते
Go के नए features देखना अच्छा लगता है
- इस लेख में बताए गए Go के दो features (
GOMEMLIMIT और routing) पिछले कुछ वर्षों में नए जोड़े गए हैं
- लगता है कि नए Go versions के release notes पर और ध्यान देना चाहिए
2 टिप्पणियां
sqlc वाकई बहुत बढ़िया है
Hacker News राय
embedpackage का ज़िक्र न होना खलता हैContextजोड़ना अच्छा है ताकि उसे cancel किया जा सकेsqlcमें कुछ बड़े limitations और छोटी असुविधाएँ हैं, इसलिए इस्तेमाल करने से पहले issue list देख लेना बेहतर हैGOMAXPROCSको सही तरीके से सेट करना चाहिएGOMEMLIMITइस्तेमाल करने से GC को लेकर चिंता कम हो सकती हैhtml/templateअजीब है और इसमें कई समस्याएँ हैं, इसलिए इसका इस्तेमाल न करना बेहतर हैTemplको पसंद किया जाता हैmuxका आदी रहा, लेकिन नए release features पर ध्यान नहीं दिया थाnilकी समस्या की वजह से आसान काम भी जटिल हो जाते हैंBEGIN CONCURRENTका इस्तेमाल करके concurrency बेहतर की जा सकती है