𝗚𝗼 𝗖𝗼𝗻𝘁𝗲𝘅𝘁 𝗣𝗮𝗰𝗸𝗮𝗴𝗲

മിക്ക Go ഡെവലപ്പർമാരും context.Context എന്താണെന്ന് കൃത്യമായി മനസ്സിലാക്കാതെയാണ് അത് ഉപയോഗിക്കുന്നത്. HTTP ഹാൻഡ്‌ലറുകളിലും (handlers), ഡാറ്റാബേസ് കോളുകളിലും (database calls), SDK മെത്തേഡുകളിലും നിങ്ങൾ ഇത് കാണാറുണ്ട്. പല തുടക്കക്കാരും എല്ലായിടത്തും context.Background() ആണ് പാസ്സ് ചെയ്യുന്നത്.

ഈ തെറ്റ് പല പ്രശ്നങ്ങൾക്കും കാരണമാകും. ഒരു Lambda ഫംഗ്‌ഷൻ അതിന്റെ ടൈമൗട്ടിന് (timeout) ശേഷവും പ്രവർത്തിച്ചുകൊണ്ടിരിക്കാം. ഒരു യൂസർ ഡിസ്കണക്റ്റ് ആയതിന് ശേഷവും ഒരു ഡാറ്റാബേസ് ക്വറി (database query) പ്രവർത്തിച്ചുകൊണ്ടിരിക്കാം.

കോഡിലൂടെ ക്യാൻസലേഷൻ സിഗ്നലുകളും (cancellation signals) ഡെഡ്‌ലൈനുകളും (deadlines) അയക്കാൻ Context നിങ്ങളെ അനുവദിക്കുന്നു. ഇത് താഴെ പറയുന്ന മൂന്ന് ചോദ്യങ്ങൾക്ക് ഉത്തരം നൽകാൻ നിങ്ങളെ സഹായിക്കുന്നു:

• ഈ ഓപ്പറേഷൻ തുടർന്നും പ്രവർത്തിക്കണോ? • ഈ ഓപ്പറേഷൻ എപ്പോൾ അവസാനിക്കണം? • ഈ കോളിനൊപ്പം ഏത് റിക്വസ്റ്റ് ഡാറ്റയാണ് ഒഴുകുന്നത്?

Context ഇന്റർഫേസിൽ (interface) നാല് മെത്തേഡുകൾ ഉണ്ട്:

Context ഒരു മരം (tree) പോലെയാണ് പ്രവർത്തിക്കുന്നത്. നിങ്ങൾ ഒരു പാരന്റ് കോൺടെക്സ്റ്റിൽ (parent context) നിന്ന് തുടങ്ങി ചൈൽഡ് കോൺടെക്സ്റ്റുകൾ (children) നിർമ്മിക്കുന്നു.

Root Contexts:

Child Contexts:

നിർണ്ണായകമായ നിയമം: എപ്പോഴും cancel ഫംഗ്‌ഷൻ വിളിക്കുക. ഒരു ചൈൽഡ് കോൺടെക്സ്റ്റ് നിർമ്മിച്ച ഉടൻ തന്നെ defer cancel() ഉപയോഗിക്കുക. നിങ്ങൾ ഇത് ഒഴിവാക്കിയാൽ, അത് മെമ്മറി ലീക്കുകൾക്ക് (memory leaks) കാരണമാകും.

Best Practices:

ഒരു പാരന്റ് കോൺടെക്സ്റ്റ് ക്യാൻസൽ ചെയ്യുമ്പോൾ, അതിന്റെ എല്ലാ ചൈൽഡ് കോൺടെക്സ്റ്റുകളും സ്വയമേവ ക്യാൻസൽ ചെയ്യപ്പെടും. ഇത് നിങ്ങളുടെ സിസ്റ്റത്തിലുടനീളമുള്ള ഓപ്പറേഷനുകളുടെ ഒരു ശൃംഖല തന്നെ എളുപ്പത്തിൽ നിർത്താൻ സഹായിക്കുന്നു.

Source: https://dev.to/ferztyle/go-context-package-37nk