Vivasoft-logo

āĻāϰāϰ āĻāĻŦāĻ‚ āĻŸā§‡āĻ¸ā§āϟāĻŋāĻ‚(Errors and Testing )

[ā§Ŧ.ā§§] āĻāϰāϰ (Error )

āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚āϝāĻŧ⧇, āĻāϰāϰ āĻŦāϞāϤ⧇ āϭ⧁āϞ āĻŦāĻž āĻ¤ā§āϰ⧁āϟāĻŋ āĻŦā§‹āĻāĻžāϝāĻŧ āϝāĻž āĻāĻ•āϟāĻŋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāϕ⧇ āĻ āĻŋāĻ• āĻŽāϤ⧋ āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāϟ āĻšāϤ⧇ āĻŦāĻžāϧāĻž āĻĻ⧇āϝāĻŧāĨ¤ āϭ⧁āϞ āϏāĻŋāύāĻŸā§āϝāĻžāĻ•ā§āϏ, āĻ¤ā§āϰ⧁āϟāĻŋāĻĒā§‚āĻ°ā§āĻŖ āϞāϜāĻŋāĻ•, āĻ…āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤ āχāύāĻĒ⧁āϟ , āĻĄāĻŋāĻĒ⧇āύāĻĄā§‡āĻ¨ā§āϏāĻŋ āϜāĻžāĻ¤ā§€ā§Ÿ āϏāĻŽāĻ¸ā§āϝāĻžāϗ⧁āϞ⧋ āĻ›āĻžā§œāĻžāĻ“ āύāĻžāύāĻžāύ āĻ•āĻžāϰāϪ⧇ āĻāϰāϰ āϘāϟāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āφāĻļāĻž āĻ•āϰāĻŋ āĻĒā§‚āĻ°ā§āĻŦ āĻ…āĻ­āĻŋāĻœā§āĻžāϤāĻž āĻĨ⧇āϕ⧇ āφāĻŽāϰāĻž āĻ•āĻŋāϛ⧁ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻāϰāϰ⧇āϰ āϏāĻžāĻĨ⧇ āχāϤ⧋āĻŽāĻ§ā§āϝ⧇āχ āĻĒāϰāĻŋāϚāĻŋāϤāĨ¤ āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻ•āĻŋāϛ⧁ āĻŦāĻšā§āϞ āĻĒāϰāĻŋāϚāĻŋāϤ āĻāϰāϰ āϗ⧁āϞ⧋ āĻšāϞ⧋ – 

  • āϏāĻŋāύāĻŸā§āϝāĻžāĻ•ā§āϏ āĻāϰāϰ
  • āϰāĻžāύāϟāĻžāχāĻŽ āĻāϰāϰ
  • āĻ•āĻŽā§āĻĒāĻžāχāϞ⧇āĻļāύ āĻāϰāϰ
  • āϞāϜāĻŋāĻ•ā§āϝāĻžāϞ āĻāϰāϰ

[ā§Ŧ.ā§§.ā§§] Go āϤ⧇ āĻāϰāϰ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻŋāĻ‚, āωāĻĻā§āĻĻ⧇āĻļā§āϝ āĻāĻŦāĻ‚ āĻĒā§āĻ°ā§Ÿā§‹āϜāĻ¨ā§€ā§ŸāϤāĻž

āĻāϰāϰ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻāϰ āĻāĻ•āϟāĻž āĻ…āĻŦāĻŋāĻšā§āϛ⧇āĻĻā§āĻĻā§āϝ āĻ…āĻ‚āĻļ āϤāĻžāχ āĻāϰāϰ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞāĻŋāĻ‚ āĻāϰ āĻŦāĻŋāώ⧟āϟāĻž Go āĻāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āĻ“ āϖ⧁āĻŦāχ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤Â 

Go āĻŽā§‚āϞāϤ āϕ⧋āύ⧋ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻļ⧇āώ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ­ā§āϝāĻžāϞ⧁ āĻšāĻŋāϏ⧇āĻŦā§‡Â  error āϟāĻžāχāĻĒ⧇āϰ āĻāĻ•āϟāĻŋ āĻ­ā§āϝāĻžāϞ⧁ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇ āĻāϰāϰ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰ⧇ āĻĨāĻžāϕ⧇āĨ¤ āĻŦāĻ°ā§āϤāĻŽāĻžāύ⧇ Go āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāĻĻ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āϏāĻŦāĻĨ⧇āϕ⧇ āĻŦ⧜ āĻšā§āϝāĻžāϞ⧇āĻžā§āϜāϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝ⧇ āωāĻĒāϰ⧇āϰ āĻĻāĻŋāϕ⧇āχ āĻĨāĻžāĻ•āĻŦ⧇ āĻāϰāϰ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻŋāĻ‚āĨ¤ āϤāĻžāχ āĻāϟāĻžāϕ⧇ āĻ•āĻŽ āϗ⧁āϰ⧁āĻ¤ā§āĻŦ āĻĻāĻŋā§Ÿā§‡ āĻŦāĻž āĻĒāĻžāĻļ āĻ•āĻžāϟāĻŋā§Ÿā§‡ āϝāĻžāĻ“ā§ŸāĻž āϕ⧋āύ⧋āĻ­āĻžāĻŦ⧇āχ āωāϚāĻŋāϤ āĻšāĻŦ⧇ āύāĻžāĨ¤Â 

āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻŽā§‚āϞāϧāĻžāϰāĻžāϰ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻ˛ā§āϝāĻžāĻ‚āĻ—ā§ā§Ÿā§‡āϜāϗ⧁āϞ⧋ āϝ⧇āĻŽāύ Java, Javascript,Python āĻŦāĻž C# āύāĻŋā§Ÿā§‡ āĻĒā§‚āĻ°ā§āĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇ āĻĨāĻžāĻ•āϞ⧇ āĻšā§ŸāϤ āϜāĻžāύāĻž āφāϛ⧇ āϝ⧇, āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— āĻ˛ā§āϝāĻžāĻ‚āĻ—ā§ā§Ÿā§‡āϜāϗ⧁āϞ⧋āχ āĻāĻ•ā§āϏ⧇āĻĒāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ āĻāĻ•āϟāĻŋ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āϝāĻ–āύ āĻāĻ•āϟāĻž āĻāĻ•ā§āϏ⧇āĻĒāĻļāύ āĻĨā§āϰ⧋ āĻ•āϰāĻž āĻšā§Ÿ āϤāĻ–āύ āϕ⧋āĻĄ āϏ⧇āĻ–āĻžāύ⧇āχ āĻĨ⧇āĻŽā§‡ āĻ—āĻŋā§Ÿā§‡ āĻāχ āĻāĻ•ā§āϏ⧇āĻĒāĻļāύ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāĻžāϰ āϕ⧋āύ⧋ āϕ⧋āĻĄ āĻŦā§āϞāϕ⧇āϰ āĻ–ā§‹āρāĻœā§‡ āύ⧇āĻŽā§‡ āĻĒā§œā§‡āĨ¤ āĻāχ āĻāĻ•ā§āϏ⧇āĻĒāĻļāύ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰ āĻ āĻŋāĻ• āĻ•āϰ⧇ āĻĻā§‡ā§Ÿ āϝ⧇ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϧāĻžāĻĒ āĻ•āĻŋ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āϕ⧋āύ⧋ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰ āύāĻž āĻĒāĻžāĻ“ā§ŸāĻž āϗ⧇āϞ⧇ āϕ⧋āĻĄ āĻ•ā§āĻ°ā§āϝāĻžāĻļ āĻ•āϰāĻŦ⧇ āĻŦāĻž āĻŦāĻ¨ā§āϧ āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇ –

āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻ˛ā§āϝāĻžāĻ‚āĻ—ā§ā§Ÿā§‡āϜāϗ⧁āϞ⧋āϰ āĻŦāĻŋāĻĒāϰ⧀āϤ⧇, Go āĻāϰāϰāϕ⧇ āĻ…āύāĻŋāĻŦāĻžāĻ°ā§āϝ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŽā§‡āύ⧇ āύāĻŋā§Ÿā§‡ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤ āĻŦāĻ°ā§āϤāĻŽāĻžāύ⧇ āĻŦā§āϝāĻžāĻ•-āĻāĻ¨ā§āĻĄ āϏāĻžāĻ°ā§āĻ­āĻŋāϏāϗ⧁āϞ⧋āϰ āĻ•ā§āώ⧇āĻ¤ā§āĻ°ā§‡Â  āĻāĻ•āϟāĻŋ āϏāĻžāĻ°ā§āĻ­āĻŋāϏāϕ⧇ āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āĻŦāĻžāχāϰ⧇āϰ API āĻ•āϞ, āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ read āĻāĻŦāĻ‚ write āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āϏāĻžāĻ°ā§āĻ­āĻŋāϏāϗ⧁āϞ⧋āĻ°Â  āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻšā§ŸāĨ¤ āωāĻĒāϰ⧇āϰ āĻ•āĻžāϜāϗ⧁āϞ⧋āϰ āĻŽāĻ§ā§āϝ⧇ āϝ⧇āϕ⧋āύ⧋āϟāĻž āĻĢ⧇āχāϞ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŽāύāĻ•āĻŋ āĻĄāĻžāϟāĻž āĻĒāĻžāĻ°ā§āϏāĻŋāĻ‚ āĻŦāĻž āĻ­ā§āϝāĻžāϞāĻŋāĻĄā§‡āϟ āĻ•āϰāĻžāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āĻ“āĨ¤ āϝ⧇āĻšā§‡āĻ¤ā§Â  Go āĻŽāĻžāĻ˛ā§āϟāĻŋāĻĒāϞ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ­ā§āϝāĻžāϞ⧁ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻ•āϰ⧇ āϤāĻžāχ āĻāχ āĻ•āϞāϗ⧁āϞ⧋ āĻĨ⧇āϕ⧇ āϝ⧇ āĻāϰāϰāĻ“ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āĻāϟāĻž āϧāϰ⧇ āύāĻŋā§Ÿā§‡āχ āĻāϰāϰ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤Â 

Go -āĻāϰ āĻāϰāϰ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞāĻŋāĻ‚ āĻāϰ āĻĒāĻĻā§āϧāϤāĻŋāϟāĻŋ,  āĻŽāĻžāύ⧇ āĻāϰāϰāϕ⧇ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ­ā§āϝāĻžāϞ⧁ āĻšāĻŋāϏāĻžāĻŦ⧇ āϚāĻŋāĻ¨ā§āϤāĻž āĻ•āϰāĻžāϰ āĻŦāĻŋāώ⧟āϟāĻž āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ­āĻŋāĻ¨ā§āύ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻ˛ā§āϝāĻžāĻ‚āĻ—ā§ā§Ÿā§‡āϜ āĻĨ⧇āϕ⧇āĨ¤

āĻāϰāϰ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞāĻŋāĻ‚ āĻāϰ āϏāĻŽā§Ÿ āĻšā§ŸāϤ āĻāĻ•āϟāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϕ⧋āĻĄ āĻŦā§āϞāĻ• āĻŦāĻžāϰ āĻŦāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ – 

				
					 res, err := doSomething()
   if err != nil {
       // Handle error
   }

				
			

āĻāĻŦāĻ‚ āĻāĻ•āϟāĻž āϏāĻŽā§Ÿ āĻĒāϰ āĻŽāύ⧇ āĻšāĻŦ⧇ āĻ•āĻŋāĻŦā§‹āĻ°ā§āĻĄā§‡ āĻāχāϰāĻ•āĻŽ āĻāĻ•āϟāĻŋ āĻŦāĻžāϟāύ āĻĨāĻžāĻ•āϞ⧇ āĻŽāύ⧇ āĻšā§Ÿ āϖ⧁āĻŦ āĻ­āĻžāϞ⧋ āĻšāϤ⧋ –

Go-āϤ⧇ āĻāϰāϰ āĻ•ā§‡Â  āϰāĻŋāĻĒā§āϰ⧇āĻœā§‡āĻ¨ā§āϟ āĻ•āϰāĻž āĻšā§Ÿ āĻŦāĻŋāĻ˛ā§āϟ āχāύ āĻāϰāϰ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡Â  āϝ⧇āϟāĻžāϤ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ āĻŽā§‡āĻĨāĻĄ āĻ°ā§Ÿā§‡āϛ⧇āĨ¤

				
					type error interface {
       Error() string
   }

				
			

āĻŽā§‚āϞāϤ, āĻāϰāϰ āĻšāĻšā§āϛ⧇ āĻāĻŽāύ āĻ•āĻŋāϛ⧁ āϝāĻž āĻ•āĻŋāύāĻž āĻāĻ‡Â  Error() āĻŽā§‡āĻĨāĻĄ āϏāĻŋāĻ—āύ⧇āϚāĻžāϰāϕ⧇ āχāĻŽāĻĒā§āϞāĻŋāĻŽā§‡āĻ¨ā§āϟ āĻ•āϰ⧇ āĻāĻŦāĻ‚ string  āĻšāĻŋāϏ⧇āĻŦ⧇ āĻāĻ•āϟāĻŋ āĻāϰāϰ āĻŽā§‡āϏ⧇āϜ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇āĨ¤

Go-āϤ⧇ āĻĒā§āϰāϧāĻžāύāϤ āĻĻ⧁āχāϧāϰāϪ⧇āĻ°Â  āĻāϰāϰ āϰāϝāĻŧ⧇āϛ⧇ – 

  1. āĻŦāĻŋāĻ˛ā§āϟ āχāύ āĻāϰāϰ (Built-in Error): Go-āϤ⧇, āĻŦ⧇āĻļ āĻ•āĻŋāϛ⧁ āĻŦāĻŋāĻ˛ā§āϟ āχāύ āĻāϰāϰ āϰāϝāĻŧ⧇āϛ⧇, āϝāĻž āϏāϚāϰāĻžāϚāĻ°Â  āĻāĻ•āϟāĻŋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ āϰāĻžāύ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āϘāϟāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāχ āĻāϰāϰāϗ⧁āϞ⧋ āχāωāϜāĻžāϰāϕ⧇ āφāϰāĻ“ āĻ…āĻ°ā§āĻĨāĻĒā§‚āĻ°ā§āĻŖ āĻāϰāϰ āĻŽā§‡āϏ⧇āϜ āĻĻāĻŋāϤ⧇ āĻāĻŦāĻ‚ āϕ⧋āĻĄā§‡ āϏāĻŽāĻ¸ā§āϝāĻžāϗ⧁āϞ⧋ āĻĄāĻŋāĻŦāĻžāϗ⧇ āϏāĻšāĻžāϝāĻŧāϤāĻž āĻ•āϰāϤ⧇, āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

Go-āϤ⧇ āĻŦāĻŋāĻ˛ā§āϟ-āχāύ āĻāϰāϰ⧇āϰ āĻāĻ•āϟāĻŋ āĻŽāϜāĻžāϰ āωāĻĻāĻžāĻšāϰāĻŖ āĻšāϞ math.ErrNaN āĻāϰāϰāĨ¤ āĻŽā§‚āϞāϤ āĻ—āĻŖāύāĻžāϰ āĻĢāϞāĻžāĻĢāϞ āĻ­ā§āϝāĻžāϞāĻŋāĻĄ āϏāĻ‚āĻ–ā§āϝāĻž āύāĻž āĻšā§Ÿā§‡ āĻĨāĻžāĻ•āϞ⧇ āĻāχ āĻāϰāϰ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻšā§ŸāĨ¤ āĻāĻ•āϟāĻŋ āĻ‹āĻŖāĻžāĻ¤ā§āĻŽāĻ• āϏāĻ‚āĻ–ā§āϝāĻžāϰ āĻŦāĻ°ā§āĻ—āĻŽā§‚āϞ āύ⧇āĻ“āϝāĻŧāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāχ āĻ¤ā§āϰ⧁āϟāĻŋ āϘāϟāϤ⧇ āĻĒāĻžāϰ⧇, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒāσ-

				
					 _, err := math.Sqrt(-1)
   if err == math.ErrNaN {
       fmt.Println("Oops, I think I just broke math!")
   }

				
			

Go-āϤ⧇ āφāϰ⧇āĻ•āϟāĻŋ āĻŦāĻŋāĻ˛ā§āϟ-āχāύ āĻāϰāϰ āĻšāϞ os.ErrNotExist āĻāϰāϰāĨ¤ āϝāĻ–āύ āϕ⧋āĻ¨ā§‹Â  āĻĢāĻžāĻ‚āĻļāύ āĻāĻŽāύ āϕ⧋āύ⧋ āĻĢāĻžāχāϞ āĻŦāĻž āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋāϰ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāϤ⧇ āϚāĻžā§Ÿ āϝ⧇āϟāĻž āĻāĻ•ā§āϏāĻŋāĻ¸ā§āϟ āĻ•āϰ⧇ āύāĻž, āϏ⧇āϏāĻŦ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋāϤ⧇ āĻāχ āĻāϰāϰāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇ –

				
					
   file, err := os.Open("nonexistent-file.txt")
   if err != nil && os.IsNotExist(err) {
       fmt.Println("Sorry, I can't find that file.")
   }

				
			

2. āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻāϰāϰ (Custom Error): āĻŦāĻŋāĻ˛ā§āϟ-āχāύ āĻāϰāϰāϗ⧁āϞ⧋ āĻ›āĻžāĻĄāĻŧāĻžāĻ“, Go āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāĻĻ⧇āϰ errors.New() āĻĢāĻžāĻ‚āĻļāύ (āϝ⧇āϟāĻž āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāĻŽāϰāĻž āĻāĻ•āϟ⧁ āĻĒāϰ⧇āχ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āϜāĻžāύāĻŦā§‹) āĻŦāĻž āĻāϰāϰ āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻāϰāϰ āϟāĻžāχāĻĒ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϏ⧁āϝ⧋āĻ— āĻĻā§‡ā§Ÿ āϝāĻžāϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āφāĻŽāϰāĻž āύāĻŋāĻœā§‡āĻĻ⧇āϰ āĻŽāϤ⧋ āĻ•āϰ⧇ āĻāϰāϰ āĻŽā§‡āϏ⧇āϜ āĻ āĻŋāĻ• āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ āĻāϟāĻŋ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāĻĻ⧇āϰ āφāϰāĻ“ āĻ…āĻ°ā§āĻĨāĻĒā§‚āĻ°ā§āĻŖ āĻāϰāϰ āĻŽā§‡āϏ⧇āϜ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āĻāϰāϰ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϤāĻĨā§āϝ āĻāύāĻ•ā§āϝāĻžāĻĒāϏ⧁āϞ⧇āϟ āĻ•āϰāĻžāϰ āϏ⧁āϝ⧋āĻ— āĻĻ⧇āϝāĻŧ –

				
					 type MyError string

   func (e MyError) Error() string {
       return string(e)
   }

   func myFunc() error {
       // do something...
       return MyError("Something went wrong!")
   }

				
			

āĻŽā§‚āϞāϤ āĻāĻ–āĻžāύ⧇ MyError āĻ, error āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ⧇ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ Error() āĻŽā§‡āĻĨāĻĄ āϏāĻŋāĻ—āύ⧇āϚāĻžāϰāϕ⧇ āχāĻŽāĻĒā§āϞāĻŋāĻŽā§‡āĻ¨ā§āϟ āĻ•āϰāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āφāĻŽāϰāĻž āύāĻŋāĻœā§‡āĻĻ⧇āϰ āĻŽāϤ⧋ āĻ•āϰ⧇ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻāϰāϰ āĻŽā§‡āϏ⧇āϜ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤

āĻāĻ›āĻžā§œāĻžāĻ“ āϚāĻžāχāϞ⧇ āĻ•āĻžāĻ¸ā§āϟāĻŽ Struct āĻĻāĻŋā§Ÿā§‡āĻ“ āĻāϰāϰāϕ⧇ āϰāĻŋāĻĒā§āϰ⧇āĻœā§‡āĻ¨ā§āϟ āĻ•āϰāĻž āϝāĻžā§Ÿ, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ –

				
					  package main

   import "fmt"

   func main() {
       user := new(User)
       user.FirstName = "Kawsar"
       err := myFunc(*user)
       fmt.Println(err.Error())
   }

   type MyError struct {
       Code    int
       Message string
   }

   func (e MyError) Error() string {
       return fmt.Sprintf("Error %d: %s", e.Code, e.Message)
   }

   type User struct {
       FirstName string
       LastName  string
   }

   func myFunc(user User) error {
       if user.FirstName == "" {
           return MyError{Code: 400, Message: "First name is required"}
       }
       if user.LastName == "" {
           return MyError{Code: 400, Message: "Last name is required"}
       }
       return nil
   }


   //Output: Error 400: Last name is required

				
			

āĻāĻ›āĻžā§œāĻžāĻ“ āφāϰāĻ“ āĻ•āĻŋāϛ⧁ āĻāϰāϰ āĻšāϞāσ

  • āϰāĻžāύāϟāĻžāχāĻŽ āĻāϰāϰ (Runtime Error): āĻāϗ⧁āϞ⧋ āĻāĻŽāύ āĻāϰāϰ āϝāĻž āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽā§‡āϰ āϰāĻžāύ āϟāĻžāχāĻŽā§‡ āϘāĻŸā§‡, āϝ⧇āĻŽāύ āĻļā§‚āĻ¨ā§āϝ āĻĻā§āĻŦāĻžāϰāĻž āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻ­āĻžāϜāύ, āĻ…ā§āϝāĻžāϰ⧇āϰ āĻŦāĻžāχāϰ⧇āϰ āωāĻĒāĻžāĻĻāĻžāύ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāĻž āχāĻ¤ā§āϝāĻžāĻĻāĻŋāĨ¤

 

  • āĻĢāĻžāĻ‚āĻļāύ āĻĻā§āĻŦāĻžāϰāĻž āϰāĻŋāϟāĻžāĻ°ā§āύāĻ•ā§ƒāϤ āĻāϰāϰ (Errors Returned by Functions): āĻāĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āϕ⧋āύ⧋ āĻĢāĻžāĻ‚āĻļāύ āϝāĻ–āύ āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ āϤāĻžāϰ āĻ…āĻĒāĻžāϰ⧇āĻļāύ āϗ⧁āϞ⧋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĻž āϤāĻ–āύ āĻāϰāϰ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇āĨ¤ Go-āϤ⧇, āϝ⧇ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞ⧋ āĻāϰāϰ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇ āϏ⧇āϗ⧁āϞ⧋āϰ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻ•āϟāĻŋ āϰāĻŋāϟāĻžāĻ°ā§āύ āϟāĻžāχāĻĒ āĻĨāĻžāϕ⧇ (resultType, error)⧎ āĻāϰāϰ āĻ•āĻ¨ā§āĻĄāĻŋāĻļāύ āϏāĻ¤ā§āϝ āĻšāϞ⧇ āĻāϰāϰ āĻ­ā§āϝāĻžāĻ˛ā§Â  āφāϰ āĻāϰāϰ āύāĻž āĻšāϞ⧇ āĻ•āĻžāĻ™ā§āĻ–āĻŋāϤ āĻĢāϞāĻžāĻĢāϞ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇ –
				
					  func divide(a, b float64) (float64, error) {
           if b == 0 {
               return 0, errors.New("division by zero")
           }
           return a / b, nil
       }

				
			

āĻāχ āωāĻĻāĻžāĻšāϰāϪ⧇, divide() āĻĢāĻžāĻ‚āĻļāύ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĻ⧁āϟāĻŋ float64 āϏāĻ‚āĻ–ā§āϝāĻž āύ⧇āϝāĻŧ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ float64 āĻŽāĻžāύ āĻ“ āĻāĻ•āϟāĻŋ āĻāϰāϰ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇āĨ¤ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻļā§‚āĻ¨ā§āϝ āĻšāϞ⧇, āĻĢāĻžāĻ‚āĻļāύ errors.New() āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āĻ•āĻžāĻ¸ā§āϟāĻŽ āĻāϰāϰ āĻŦāĻžāĻ°ā§āϤāĻž āϏāĻš āĻāĻ•āϟāĻŋ āĻāϰāϰ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇āĨ¤ āĻ…āĻ¨ā§āϝāĻĨāĻžāϝāĻŧ, āĻāϟāĻŋ āĻĻ⧁āϟāĻŋ āϏāĻ‚āĻ–ā§āϝāĻžāϰ āĻ­āĻžāĻ—āĻĢāϞ āĻ—āĻŖāύāĻž āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āύāĻŋāϞ āĻāϰāϰ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇āĨ¤

[ā§Ŧ.ā§§.⧍] errors āĻĒā§āϝāĻžāϕ⧇āϜ

errors āĻĒā§āϝāĻžāϕ⧇āϜ āĻšāϞ Go āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻ˛ā§āϝāĻžāĻ™ā§āϗ⧁āϝāĻŧ⧇āĻœā§‡ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻ˛ā§āϟ āχāύ āĻĒā§āϝāĻžāϕ⧇āϜ āϝāĻžāϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āφāĻŽāϰāĻž āϏāĻšāĻœā§‡āχ āĻāϰāϰ āϤ⧈āϰāĻŋ āĻāĻŦāĻ‚ āĻŽā§āϝāĻžāύāĻŋāĻĒ⧁āϞ⧇āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦā§‹āĨ¤ āĻāĻ–āύ āφāĻŽāϰāĻžÂ  āĻāχ āĻĒā§āϝāĻžāϕ⧇āĻœā§‡āϰ āϏāϚāϰāĻžāϚāϰ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞ⧋ āύāĻŋā§Ÿā§‡ āϧāĻžāϰāύāĻž āύāĻŋāĻŦā§‹āσ-

  1. Is():
				
					  func Is(err, target error) bool

				
			

āĻĒāĻžāϏ āĻ•āϰāĻž āĻāϰāϰ āĻāĻŦāĻ‚ āϟāĻžāĻ°ā§āϗ⧇āϟ āĻāϰāϰ āĻāĻ•āχ āĻ•āĻŋāύāĻž āϤāĻž āĻšā§‡āĻ• āĻ•āϰāϤ⧇ Is āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ, āϏāĻŽāĻžāύ āĻšāϞ⧇ true, āύāĻž āĻšāϞ⧇ false āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āĻ°ā§‡Â  –

				
					package main

   import (
       "errors"
       "fmt"
       "io/fs"
       "os"
   )

   func main() {
       if _, err := os.Open("non-existing"); err != nil {
           if errors.Is(err, fs.ErrNotExist) {
               fmt.Println("file does not exist")
           } else {
               fmt.Println(err)
           }
       }
   }


   //Output:
   //file does not exist
				
			

2. New():

				
					   func New(text string) error
				
			

āĻāχ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻāĻ•āϟāĻŋ string āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āύ⧇āϝāĻŧ āĻāĻŦāĻ‚ āϏ⧇āχ string āĻ…āύ⧁āϝāĻžā§Ÿā§€ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻāϰāϰ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇ –

				
					

   func main() {
       err := errors.New("something went wrong")
       if err != nil {
           fmt.Print(err)
       }
   }

				
			

 3. As():

				
					  func As(err error, target any) bool
				
			

āĻāχ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ, errors.Is() āĻāϰ āĻ…āύ⧁āϰ⧂āĻĒ āĻāĻ• āϧāϰāύ⧇āϰ āĻāϰāϰ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻāϰāϰ āϟāĻžāχāĻĒ āφāϰāϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ¨ā§‡ā§Ÿ āϤāĻžāϰāĻĒāϰ⧇ āĻāϟāĻŋ āĻĒāĻžāϏ āĻ•ā§ƒāϤ āĻāϰāϰāϟāĻŋāϰ āĻšā§‡āχāύ⧇āϰ āĻĨāĻžāĻ•āĻž āĻ…āĻ¨ā§āϝāϏāĻŦ āĻāϰāϰ⧇āĻ°Â  āϟāĻžāχāĻĒ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāĻĻāĻ¤ā§āϤ āĻāϰāϰ āϟāĻžāχāĻĒ āĻŽā§‡āϞ⧇ āĻ•āĻŋāύāĻž āϤāĻž āĻšā§‡āĻ• āĻ•āϰ⧇ āĨ¤ āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āĻāϰāϰ āĻāϰāĻ“ āϟāĻžāχāĻĒ āĻŽāĻŋāϞ⧇ āϝāĻžāϝāĻŧ, āϤāĻžāĻšāϞ⧇ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ true āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇, āύāĻž āĻšāϞ⧇ āĻāϟāĻŋ false āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇ –

				
					func main() {
       if _, err := os.Open("non-existing"); err != nil {
           var pathError *fs.PathError
           if errors.As(err, &pathError) {
               fmt.Println("Failed at path:", pathError.Path)
           } else {
               fmt.Println(err)
           }
       }
   }


   //Output:
   //Failed at path: non-existing

				
			

4. Join():

				
					 func Join(errs ...error) error

				
			

āĻāχ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻ…āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻ‚āĻ–ā§āϝāĻ• āĻāϰāϰ āφāϰāϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ¨ā§‡ā§Ÿ āĻāĻŦāĻ‚ āϏāĻŦāϗ⧁āϞ⧋ āĻāϰāϰāϕ⧇ āĻāĻ• āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āϏāĻŋāĻ™ā§āϗ⧇āϞ āĻāϰāϰ āĻŽā§‡āϏ⧇āϜ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇ –

				
					package main

   import (
       "errors"
       "fmt"
   )

   func main() {
       err1 := errors.New("err1")
       err2 := errors.New("err2")
       err := errors.Join(err1, err2)
       fmt.Println(err)
       if errors.Is(err, err1) {
           fmt.Println("err is err1")
       }
       if errors.Is(err, err2) {
           fmt.Println("err is err2")
       }
   }

				
			

āφāωāϟāĻĒ⧁āϟ – 

				
					err1
   err2
   err is err1
   err is err2

				
			

āĻāχ āĻĒā§āϝāĻžāϕ⧇āϜ āĻāϰ āĻĢāĻžāĻ‚āĻļāĻ‚āύ āϗ⧁āϞ⧋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āϜāĻžāύāϤ⧇ āĻāχ āϞāĻŋāĻ‚āĻ•āϟāĻŋ āĻ•āĻžāĻœā§‡ āφāϏāĻŦ⧇āĨ¤

[ā§Ŧ.ā§§.ā§Š] āĻĒā§āϝāĻžāύāĻŋāĻ• āĻ“ āϰāĻŋāϕ⧋āĻ­āĻžāϰ (Panic & Recover)

Go āϤ⧇ āĻāϰāϰ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞāĻŋāĻ‚ āĻāϰ āϜāĻ¨ā§āϝ panic āĻāĻŦāĻ‚ recover āύāĻžāĻŽā§‡ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻĻ⧁āϟāĻŋ āĻŦāĻŋāĻ˛ā§āϟ āχāύ āĻĢāĻžāĻ‚āĻļāύ āĻ°ā§Ÿā§‡āϛ⧇ āϝ⧇āϗ⧁āϞ⧋ āĻĻāĻŋā§Ÿā§‡ āφāĻŽāϰāĻž āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽā§‡āϰ āĻ•āĻŋāϛ⧁ āĻ…āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤ āϏāĻŋāĻšā§ā§Ÿā§‡āĻļāύ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰ⧇ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāϕ⧇ āĻ•ā§āĻ°ā§āϝāĻžāĻļ āĻ•āϰāĻž āĻĨ⧇āϕ⧇ āϰāĻ•ā§āώāĻž āĻ•āϰāĻŋāĨ¤

Panic

panic āĻšāĻšā§āϛ⧇ āĻāĻŽāύ āĻāĻ•āϟāĻž āĻĢāĻžāĻ‚āĻļāύ āϝāĻž āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽā§‡āϰ āύāϰāĻŽāĻžāϞ āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāĻļāύ āϤāĻžā§ŽāĻ•ā§āώāύāĻŋāĻ• āĻŦāĻ¨ā§āϧ āĻ•āϰ⧇, āϏāĻŽāĻ¸ā§āϤ defer āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞ⧋ āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāϟ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āϞāĻ— āĻŽā§‡āϏ⧇āϜ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻšāϝāĻŧ, āϝāĻžāϤ⧇ āĻĒā§āϝāĻžāύāĻŋāĻ• āĻ­ā§āϝāĻžāϞ⧁ (āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻ•āϟāĻŋ āĻāϰāϰ āĻŽā§‡āϏ⧇āϜ) āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāĻ• āĻŸā§āϰ⧇āϏ(āĻāĻ•āϟāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻŽā§Ÿā§‡ āĻ•āϞ āĻ¸ā§āĻŸā§āϝāĻžāϕ⧇ āĻĨāĻžāĻ•āĻž āϏāĻŦāϗ⧁āϞ⧋ āĻĢāĻžāĻ‚āĻļāύ āĻ•āϞ) āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻĨāĻžāϕ⧇āĨ¤

panic āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻ•āĻžāϰāϪ⧇ āϘāϟāϤ⧇ āĻĒāĻžāϰ⧇, āϝ⧇āĻŽāύ āĻāĻ•āϟāĻŋ āύāĻŋāϞ āĻĒāϝāĻŧ⧇āĻ¨ā§āϟāĻžāϰ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāĻž, āĻāĻ•āϟāĻŋ āϏāĻ‚āĻ–ā§āϝāĻžāϕ⧇ āĻļā§‚āĻ¨ā§āϝ āĻĻāĻŋāϝāĻŧ⧇ āĻ­āĻžāĻ— āĻ•āϰāĻž, āĻŦāĻž āϏ⧀āĻŽāĻžāϰ āĻŦāĻžāχāϰ⧇āϰ āĻ…ā§āϝāĻžāϰ⧇ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāĻž āχāĻ¤ā§āϝāĻžāĻĻāĻŋāĨ¤ āϏāĻžāϧāĻžāϰāĻŖāϤ, panic āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻ•āϰ⧇ āϝ⧇ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽā§‡ āĻ…āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤ āĻāĻŦāĻ‚ āϗ⧁āϰ⧁āϤāϰ āĻ•āĻŋāϛ⧁ āϘāĻŸā§‡āϛ⧇ āϝāĻž āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāϟāĻŋ āύāϰāĻŽāĻžāϞāĻŋ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāϛ⧇ āύāĻžāĨ¤

				
					 func main() {
       divide(5)
   }

   func divide(x int) {
       fmt.Printf("divide(%d) \n", x+0/x)
       divide(x - 1)
   }

				
			

āĻāĻ•āĻŦāĻžāϰ āĻļā§‚āĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĄāĻŋāĻ­āĻžāχāĻĄ āĻĢāĻžāĻ‚āĻļāύ āĻ•āϞ āĻ•āϰāĻž āĻšāϞ⧇, āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāϟāĻŋ panic āĻ•āϰāĻŦ⧇ , āϝāĻžāϰ āĻĢāϞ⧇ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āφāωāϟāĻĒ⧁āϟ āĻšāĻŦ⧇ –

				
					 divide(5)
   divide(4)
   divide(3)
   divide(2)
   divide(1)
   panic: runtime error: integer divide by zero
   Goroutine 1 [running]:
   main.divide(0x8053a8?)
       d:/GoLang/Gobyexample/dummy.go:10 +0xa5
   main.divide(0x1)
       d:/GoLang/Gobyexample/dummy.go:11 +0x94
   main.divide(0x2)
       d:/GoLang/Gobyexample/dummy.go:11 +0x94
   main.divide(0x3)
       d:/GoLang/Gobyexample/dummy.go:11 +0x94
   main.divide(0x4)
       d:/GoLang/Gobyexample/dummy.go:11 +0x94
   main.divide(0x5)
       d:/GoLang/Gobyexample/dummy.go:11 +0x94
   main.main()
       d:/GoLang/Gobyexample/dummy.go:6 +0x1e
   exit status 2

				
			

āφāĻŽāϰāĻž āύāĻŋāϜāĻ¸ā§āĻŦ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽā§‡ āĻŦāĻŋāĻ˛ā§āϟ āχāύ panic āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ –

				
					func getArguments() {
       if len(os.Args) == 1 {
           panic("Not enough arguments!")
       }
   }

				
			

panic  āĻĢāĻžāĻ‚āĻļāύ āĻŽā§‚āϞāϤ āĻāĻŽāύāϏāĻŦ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āχ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āωāϚāĻŋāϤ āϝāĻ–āύ āĻāĻŽāύ āĻ•āĻŋāϛ⧁ āϘāĻŸā§‡ āϝāĻž āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāϟāĻŋ āφāĻļāĻž āĻ•āϰ⧇āύāĻž āĻŦāĻž āύāϰāĻŽāĻžāϞ āĻ“ā§Ÿā§‡āϤ⧇ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāĻžāϰ āφāϰ āϕ⧋āύ⧋ āωāĻĒāĻžā§Ÿ āĻĨāĻžāϕ⧇ āύāĻžāĨ¤

āύāĻŋāĻšā§‡āϰ āωāĻĻāĻžāĻšāϰāϪ⧇ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšā§Ÿā§‡āϛ⧇ āĻ•āĻŋāĻ­āĻžāĻŦ⧇, āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ panic āĻ•āϰāĻžāϰ āφāϗ⧇ defer āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞ⧋ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻ•āϰāĻž āĻšā§Ÿā§‡ āĻĨāĻžāϕ⧇ –

				
					  func main() {
       accessSlice([]int{1, 2, 5, 6, 7, 8}, 0)
   }

   func accessSlice(slice []int, index int) {
       fmt.Printf("item %d, value %d \n", index, slice[index])
       defer fmt.Printf("defer %d \n", index)
       accessSlice(slice, index+1)
   }

				
			

āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽā§‡āϰ āφāωāϟāĻĒ⧁āϟ –

				
					 item 0, value 1
   item 1, value 2
   item 2, value 5
   item 3, value 6
   item 4, value 7
   item 5, value 8
   defer 5
   defer 4
   defer 3
   defer 2
   defer 1
   defer 0
   panic: runtime error: index out of range [6] with length 6
   Goroutine 1 [running]:
   main.accessSlice({0xc000107f40?, 0x6, 0x6}, 0x6)
       d:/GoLang/Gobyexample/dummy.go:10 +0x186
   main.accessSlice({0xc000107f40?, 0x6, 0x6}, 0x5)
       d:/GoLang/Gobyexample/dummy.go:12 +0x15c
   main.accessSlice({0xc000107f40?, 0x6, 0x6}, 0x4)
       d:/GoLang/Gobyexample/dummy.go:12 +0x15c
   main.accessSlice({0xc000107f40?, 0x6, 0x6}, 0x3)
       d:/GoLang/Gobyexample/dummy.go:12 +0x15c
   main.accessSlice({0xc000107f40?, 0x6, 0x6}, 0x2)
       d:/GoLang/Gobyexample/dummy.go:12 +0x15c
   main.accessSlice({0xc000107f40?, 0x6, 0x6}, 0x1)
       d:/GoLang/Gobyexample/dummy.go:12 +0x15c
   main.accessSlice({0xc000107f40?, 0x6, 0x6}, 0x0)
       d:/GoLang/Gobyexample/dummy.go:12 +0x15c
   main.main()
       d:/GoLang/Gobyexample/dummy.go:6 +0x70
   exit status 2

				
			

panic āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āϖ⧁āĻŦāχ āϏāϤāĻ°ā§āĻ•āϤāĻžāϰ āϏāĻšāĻŋāϤ āĻāĻŦāĻ‚ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϰāĻŋāĻ•āĻ­āĻžāϰ āĻ•āϰāĻž āϝāĻžā§Ÿ āύāĻž āĻāĻŽāύ āĻāϰāϰ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āχ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āωāϚāĻŋāϤāĨ¤

āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻāĻ•āϟāĻŋ āϭ⧁āϞ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻĒāĻžāϝāĻŧ, āϤāĻŦ⧇ āĻāϟāĻŋ panic āĻ•āϰāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āĻāĻ•āϟāĻŋ āĻāϰāϰ āϰāĻŋāϟāĻžāĻ°ā§āĻ¨Â  āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϝāĻĻāĻŋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ…āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāĻĒā§‚āĻ°ā§āĻŖ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϝāĻŧ āĻĨāĻžāϕ⧇, āĻŦāĻž āϝāĻĻāĻŋ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āϗ⧁āϰ⧁āϤāϰ āĻāϰāϰ⧇āϰ āϏāĻŽā§āĻŽā§āĻ–ā§€āύ āĻšāϝāĻŧ āϝāĻž āĻāϟāĻŋ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻ°ā§āĻĨ āĻšā§Ÿ , āϤāĻžāĻšāϞ⧇ āĻāĻ•ā§āώ⧇āĻ¤ā§āĻ°ā§‡Â  panic āĻ•āϰāĻž āωāĻĒāϝ⧁āĻ•ā§āϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āϝāĻžāχāĻšā§‹āĻ•, āĻāϟāĻŋ āϞāĻ•ā§āĻˇā§āϝ āĻ•āϰāĻž āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āϝ⧇ panic āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻŦā§āϝāϤāĻŋāĻ•ā§āϰāĻŽā§€ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āχ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āωāϚāĻŋāϤ, āύāϰāĻŽāĻžāϞ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ āĻĢā§āϞ⧋ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻšāĻŋāϏāĻžāĻŦ⧇ āύāϝāĻŧāĨ¤

 

Recover 

āĻ•āĻŋāϛ⧁ āĻ•āĻŋāϛ⧁ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ panic āĻāϰ āĻ•āĻžāϰāύ⧇ āĻ•ā§āĻ°ā§āϝāĻžāĻļ āĻšā§Ÿā§‡ āϝāĻžāĻ“ā§ŸāĻž āϕ⧋āύ⧋ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϕ⧇ āĻŦāĻ¨ā§āϧ āĻ•āϰāĻž āωāϚāĻŋāϤ āύāϝāĻŧ āĻŦāϰāĻ‚ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāĻž āωāϚāĻŋāϤāĨ¤ Go-āϤ⧇, “recover ” āĻ•āĻŋāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄāϟāĻŋ āĻāĻ•āϟāĻŋ panic āĻ•āϰāĻž āĻ—ā§‹-āϰ⧁āϟāĻŋāύ āĻāϰ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧāĨ¤

āĻāĻ•āϟāĻŋ recover āĻĢāĻžāĻ‚āĻļāύ āϏāĻ°ā§āĻŦāĻĻāĻž āĻāĻ•āϟāĻŋ defer āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻ­āĻŋāϤāϰ⧇ āĻ•āϞ āĻ•āϰāĻž āωāϚāĻŋāϤ āĻ•āĻžāϰāĻŖ defer āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ panic āĻ•āϰāϞ⧇āĻ“ āĻ•āĻžāϜ āĻ•āϰāĻž āĻŦāĻ¨ā§āϧ āĻ•āϰ⧇ āύāĻž, āϤāĻžāχ āĻāϰ āĻ­āĻŋāϤāϰ⧇ āĻĨāĻžāĻ•āĻž recover āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ panic āĻŦāĻ¨ā§āϧ āĻ•āϰ⧇ āĻĻ⧇āϝāĻŧ āĻāĻŦāĻ‚ panic āĻāϰ āĻāϰāϰ āĻ­ā§āϝāĻžāϞ⧁ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇ –

				
					 package main

   import "fmt"

   func main() {
       accessSlice([]int{1, 2, 5, 6, 7, 8}, 0)
   }

   func accessSlice(slice []int, index int) {
       defer func() {
           if p := recover(); p != nil {
               fmt.Printf("internal error: %v", p)
           }
       }()
       fmt.Printf("item %d, value %d \n", index, slice[index])
       defer fmt.Printf("\n defer %d", index)
       accessSlice(slice, index+1)
   }

				
			

āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽā§‡āϰ āφāωāϟāĻĒ⧁āϟ –

				
					item 0, value 1
item 1, value 2
item 2, value 5
item 3, value 6
item 4, value 7
item 5, value 8
internal error: runtime error: index out of range [6] with length 6
 defer 5
 defer 4
 defer 3
 defer 2
 defer 1
 defer 0
				
			

āωāĻĒāϰ⧇ āφāĻŽāϰāĻž āϝ⧇ āϕ⧋āĻĄ āĻ•āϰ⧇āĻ›āĻŋ āϏ⧇āĻ–āĻžāύ⧇ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āϏ 6 āĻšāϞ⧇āχ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ  panic āĻ•āϰ⧇ defer āĻ•āϰāĻž āĻ•āĻžāϜ āϗ⧁āϞ⧋ āĻļ⧇āώ āĻ•āϰ⧇ āĻ•ā§āĻ°ā§āϝāĻžāĻļ āĻ•āϰāĻ›āĻŋāϞ⧋ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ•āϟāĻŋ recover āĻĢāĻžāĻ‚āĻļāύ āϝ⧋āĻ— āĻ•āϰāĻžāϰ āĻĒāϰ⧇ āφāĻŽāϰāĻž āĻĻ⧇āĻ–āĻ›āĻŋ āĻāĻ–āύ āφāϰ āφāϗ⧇āϰ āĻŽāϤ⧋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāϟāĻŋ āĻ•ā§āĻ°ā§āϝāĻžāĻļ  āύāĻž āĻ•āϰ⧇ āύāϰāĻŽāĻžāϞ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞ āĻĢā§āϞ⧋ āĻ…āύ⧁āϏāĻžāϰ⧇ āϚāϞāϛ⧇, āĻ•āĻžāϰāύ panic āĻ•āϰāĻžāϰ āĻĒāϰ āϏ⧇āϟāĻž āφāĻŽāĻžāĻĻ⧇āϰ defer āĻ•āϰāĻž āĻĢāĻžāĻ‚āĻļāύāϟāĻŋāϤ⧇ āĻĨāĻžāĻ•āĻžÂ  recover āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻ•ā§āϝāĻžāϚ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāϟāĻŋāϕ⧇ āĻ•ā§āĻ°ā§āϝāĻžāĻļ āĻ•āϰāĻž āĻĨ⧇āϕ⧇ āϰāĻ•ā§āώāĻž āĻ•āϰ⧇āĨ¤

āύāĻŋāĻšā§‡ āĻ•āĻŋāϛ⧁ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋ āϰāϝāĻŧ⧇āϛ⧇ āϝ⧇āĻ–āĻžāύ⧇ recover āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇:

  • āĻ…āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤ āĻāϰāϰāϗ⧁āϞ⧋ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ:  āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻāĻŽāύ āϕ⧋āύ⧋ āĻ…āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤ āĻāϰāϰ⧇āϰ āϏāĻŽā§āĻŽā§āĻ–ā§€āύ āĻšā§Ÿ āϝāĻž āύāϰāĻŽāĻžāϞāĻŋ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāĻžāϰ āϕ⧋āύ⧋ āωāĻĒāĻžā§Ÿ āύ⧇āχ, āϤāĻžāĻšāϞ⧇ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāϟāĻŋ āĻ•ā§āĻ°ā§āϝāĻžāĻļ āĻšāĻ“āϝāĻŧāĻž āĻĨ⧇āϕ⧇ āϰāĻ•ā§āώāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ recover āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āωāĻĒāĻžā§Ÿ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āĻĢāĻžāχāϞ āĻ–ā§‹āϞāĻž āύāĻž āϝāĻžāϝāĻŧ āĻŦāĻž āĻāĻ•āϟāĻŋ āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āϏāĻ‚āϝ⧋āĻ— āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϝāĻŧ, āϏ⧇āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āφāĻŽāϰāĻž āĻāϰāϰāϟāĻŋ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽ āύāϰāĻŽāĻžāϞāĻŋ āϚāĻžāϞāĻŋāϝāĻŧ⧇ āϝ⧇āϤ⧇ recover āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤

 

  • āϰāĻŋāϏ⧋āĻ°ā§āϏ āĻ•ā§āϞāĻŋāύ āφāĻĒ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ:  panic āĻāϰ āĻ•āĻžāϰāϪ⧇ āĻāĻ•āϟāĻŋ āφāύāĻ¸ā§āĻŸā§‡āĻŦāϞ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϝāĻŧ āĻĢ⧇āϞ⧇ āϰāĻžāĻ–āĻž āϰāĻŋāϏ⧋āĻ°ā§āϏāϗ⧁āϞ⧋ āĻ•ā§āϞāĻŋāύ āφāĻĒ āĻŦāĻž āĻĢā§āϰ⧀ āĻ•āϰāϤ⧇ recover āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϝ⧇āĻŽāύ, āĻĒā§āϝāĻžāύāĻŋāϕ⧇āϰ āϏāĻŽāϝāĻŧ āϕ⧋āύ⧋ āĻĢāĻžāχāϞ āĻ–ā§‹āϞāĻž āĻĨāĻžāĻ•āϞ⧇, āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāϟāĻŋ āĻŦ⧇āϰ āĻšāĻ“āϝāĻŧāĻžāϰ āφāϗ⧇ āφāĻŽāϰāĻž āĻĢāĻžāχāϞāϟāĻŋ āĻŦāĻ¨ā§āϧ āĻ•āϰāϤ⧇ recover āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤


āĻĻā§€āĻ°ā§āϘāϏāĻŽā§Ÿ āϧāϰ⧇-āϚāϞāĻŽāĻžāύ āĻ…āĻĒāĻžāϰ⧇āĻļāύāϗ⧁āϞ⧋ āĻšā§āϝāĻžāĻ¨ā§āĻĄā§‡āϞ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ: āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āĻĻā§€āĻ°ā§āϘ āϏāĻŽāϝāĻŧ āϝāĻžāĻŦāϤ āϚāĻžāϞāĻžāύ⧋āĻ°Â  āϏāĻŽā§āĻ­āĻžāĻŦāύāĻž āĻĨāĻžāϕ⧇, āϤāĻŦ⧇ āϝ⧇ āϕ⧋āύ⧋ āϏāĻŽā§Ÿ āϏ⧇āϟāĻŋ panic āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āĻāϧāϰāύ⧇āϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āϏāĻžāĻŽāϞāĻžāϤ⧇ āĻāĻŦāĻ‚ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāϟāĻŋāϕ⧇ āϚāϞāĻŽāĻžāύ āϰāĻžāĻ–āϤ⧇ recover āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āĻĒā§āĻ°ā§āϝāĻžāĻ•āϟāĻŋāϏ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϝ⧇āĻŽāύ, āĻāϟāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻŦāĻž āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻĻā§€āĻ°ā§āϘāϏāĻŽā§Ÿ āϧāϰ⧇-āϚāϞāĻŽāĻžāύ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝāĨ¤