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

ਜ਼ਿਆਦਾਤਰ Go developers context.Context ਦੀ ਵਰਤੋਂ ਇਸਨੂੰ ਸਮਝੇ ਬਿਨਾਂ ਕਰਦੇ ਹਨ। ਤੁਸੀਂ ਇਸਨੂੰ HTTP handlers, database calls, ਅਤੇ SDK methods ਵਿੱਚ ਦੇਖਦੇ ਹੋ। ਬਹੁਤ ਸਾਰੇ ਸ਼ੁਰੂਆਤੀ (beginners) ਹਰ ਜਗ੍ਹਾ context.Background() pass ਕਰਦੇ ਹਨ।

ਇਹ ਗਲਤੀ ਸਮੱਸਿਆਵਾਂ ਪੈਦਾ ਕਰਦੀ ਹੈ। ਇੱਕ Lambda function ਆਪਣੇ timeout ਤੋਂ ਬਾਅਦ ਵੀ ਲਟਕ (hang) ਸਕਦਾ ਹੈ। ਇੱਕ database query ਉਦੋਂ ਵੀ ਚੱਲਦੀ ਰਹਿ ਸਕਦੀ ਹੈ ਜਦੋਂ ਯੂਜ਼ਰ ਡਿਸਕਨੈਕਟ ਹੋ ਜਾਵੇ।

Context ਤੁਹਾਨੂੰ ਆਪਣੇ ਕੋਡ ਰਾਹੀਂ cancellation signals ਅਤੇ deadlines ਭੇਜਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ। ਇਹ ਤੁਹਾਨੂੰ ਤਿੰਨ ਸਵਾਲਾਂ ਦੇ ਜਵਾਬ ਦੇਣ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ:

• ਕੀ ਇਹ operation ਚੱਲਦਾ ਰਹਿਣਾ ਚਾਹੀਦਾ ਹੈ? • ਇਹ operation ਕਦੋਂ ਖਤਮ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ? • ਇਸ call ਦੇ ਨਾਲ ਕਿਹੜਾ request data ਜਾ ਰਿਹਾ ਹੈ?

Context interface ਵਿੱਚ ਚਾਰ methods ਹਨ:

Context ਇੱਕ tree ਵਾਂਗ ਕੰਮ ਕਰਦਾ ਹੈ। ਤੁਸੀਂ ਇੱਕ parent context ਤੋਂ ਸ਼ੁਰੂ ਕਰਦੇ ਹੋ ਅਤੇ children ਬਣਾਉਂਦੇ ਹੋ।

Root Contexts:

Child Contexts:

ਅਹਿਮ ਨਿਯਮ: ਹਮੇਸ਼ਾ cancel function ਨੂੰ ਕਾਲ ਕਰੋ। Child context ਬਣਾਉਣ ਤੋਂ ਤੁਰੰਤ ਬਾਅਦ defer cancel() ਦੀ ਵਰਤੋਂ ਕਰੋ। ਜੇਕਰ ਤੁਸੀਂ ਇਸਨੂੰ ਛੱਡ ਦਿੰਦੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ memory leaks ਪੈਦਾ ਕਰਦੇ ਹੋ।

Best Practices:

ਜਦੋਂ ਇੱਕ parent context cancel ਹੁੰਦਾ ਹੈ, ਤਾਂ ਉਸਦੇ ਸਾਰੇ children ਆਪਣੇ ਆਪ cancel ਹੋ ਜਾਂਦੇ ਹਨ। ਇਹ ਤੁਹਾਡੇ ਪੂਰੇ ਸਿਸਟਮ ਵਿੱਚ operations ਦੀ ਪੂਰੀ ਲੜੀ (chain) ਨੂੰ ਰੋਕਣਾ ਆਸਾਨ ਬਣਾਉਂਦਾ ਹੈ।

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