Vivasoft-logo

[ā§Ž.ā§Ļ] āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇ āĻ—ā§‹ (Go, in production)

āĻŦ⧁āϟāĻ•ā§āϝāĻžāĻŽā§āĻĒ⧇āϰ āϰ⧋āĻĄāĻŽā§āϝāĻžāĻĒ āϟāĻž āĻĢāϞ⧋ āĻ•āϰāϤ⧇ āĻ•āϰāϤ⧇ āĻāϤāĻĻā§‚āϰ āϝ⧇āĻšā§‡āϤ⧁ āĻāϏ⧇ āĻĒā§œā§‡āĻ›āĻŋ, āϏ⧁āϤāϰāĻžāĻ‚ āφāĻļāĻž āĻ•āϰāĻž āϝāĻžāĻšā§āϛ⧇ Go āĻāϰ āĻŦā§āϝāĻžāĻĒāĻžāϰ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ āĻ­āĻžāϞ⧋ āĻāĻ•āϟāĻž āĻŦā§‹āĻāĻžāĻĒ⧜āĻž āĻšā§Ÿā§‡ āĻ—āĻŋā§Ÿā§‡āϛ⧇āĨ¤ āϕ⧋āύ āĻāĻ•āϟāĻž āĻ˛ā§āϝāĻžāĻ‚āĻ—ā§ā§Ÿā§‡āĻœā§‡ āĻ•āϤāϟ⧁āϕ⧁ āĻšāĻžāϤ⧇ āύāĻŋā§Ÿā§‡ āφāϏāϤ⧇ āĻĒ⧇āϰ⧇āĻ›āĻŋ āϏ⧇āϟāĻžāϰ āϏāĻŦāĻĨ⧇āϕ⧇ āĻŦ⧜ āĻĒā§āϰāĻŽāĻžāĻŖ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžā§Ÿ āϏ⧇āϟāĻž āϕ⧋āύ āĻĒā§āϰāĻœā§‡āĻ•ā§āĻŸā§‡ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ āĻāϤ⧇ āĻ•āϰ⧇ āĻŦāĻžāĻ¸ā§āϤāĻŦ āϜāĻ—āϤ⧇ āφāĻŽāϰāĻž āϕ⧇āĻŽāύ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āϏāĻŽā§āĻŽā§āĻ–ā§€āύ āĻšāϤ⧇ āĻĒāĻžāϰāĻŋ āϏ⧇āϟāĻž āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇āĻ“ āĻāĻ•āϟāĻž āĻ­āĻžāϞ⧋ āϧāĻžāϰāύāĻž āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžā§ŸāĨ¤ āĻāĻ›āĻžā§œāĻžāĻ“, āϏāĻ āĻŋāĻ• āĻ—āĻžāχāĻĄāϞāĻžāχāύ āĻĒā§‡ā§Ÿā§‡ āĻāĻŽāύ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āĻ•āϰāϞ⧇ āύāĻŋāĻœā§‡ āĻĨ⧇āϕ⧇ āĻĒāϰāĻŦāĻ°ā§āϤ⧀āϤ⧇ āϕ⧋āύ⧋ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āĻšāĻžāϤ⧇ āĻ¨ā§‡ā§ŸāĻžāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āĻ“ āĻāĻ•āϟāĻž āφāĻ¤ā§āĻŽāĻŦāĻŋāĻļā§āĻŦāĻžāϏ āĻ•āĻžāϜ āĻ•āϰāĻŦ⧇āĨ¤ āϏ⧇āχ āφāĻ¤ā§āĻŽāĻŦāĻŋāĻļā§āĻŦāĻžāϏ āϟāĻž āĻšāĻžāϤ⧇āϰ āύāĻžāĻ—āĻžāϞ⧇ āĻāύ⧇ āĻĻā§‡ā§ŸāĻžāχ āĻŦ⧁āϟāĻ•ā§āϝāĻžāĻŽā§āĻĒ⧇āϰ āĻāχ āĻ…āĻ‚āĻļ⧇āϰ āϞāĻ•ā§āĻˇā§āϝāĨ¤

[ā§Ž.ā§§] āϕ⧇āύ⧋ ECHO? (Why ECHO)

Go āĻļāĻŋāĻ–āϤ⧇ āĻļāĻŋāĻ–āϤ⧇ āĻĒā§āϰāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻšāĻ āĻžā§Ž āĻ•āϰ⧇ ECHO āϤ⧇ āĻāĻžāĻĒ āĻĻā§‡ā§ŸāĻžāϤ⧇ āĻĻā§āĻŦāĻŋāϧāĻžā§Ÿ āĻĒ⧜āĻžāϰ āĻ•āĻŋāϛ⧁ āύ⧇āχāĨ¤Â  ECHO āĻ“ā§Ÿā§‡āĻŦ āĻĢā§āϰ⧇āĻŽāĻ“ā§ŸāĻžāĻ°ā§āĻ• āĻ…āύ⧇āĻ• āĻšāĻžāϞāĻ•āĻž āĻāĻŦāĻ‚ āϜāϟāĻŋāϞāϤāĻž āĻŦāĻ°ā§āϜāĻŋāϤ āĻšāĻ“ā§ŸāĻžā§Ÿ āĻŦāĻŋāĻ—āĻŋāύāĻžāϰ āĻĻ⧇āϰ āϜāĻ¨ā§āϝ āϞāĻžāĻ°ā§āύāĻŋāĻ‚ āĻ•āĻžāĻ°ā§āĻ­ āϟāĻž āϤ⧁āϞāύāĻžāĻŽā§‚āϞāĻ• āĻ•āĻŽāĨ¤ āĻŽā§‚āϞ āĻ•āĻĨāĻž āĻšāϞ⧋ Go āĻāϰ āϝāĻžāĻŦāĻ¤ā§€ā§Ÿ āĻŽā§ŒāϞāĻŋāĻ• āĻŦāĻŋāώ⧟āϗ⧁āϞ⧋ āύāĻŋā§Ÿā§‡ āĻ­āĻžāϞ⧋ āϧāĻžāϰāĻŖāĻž āĻĨ⧇āϕ⧇ āĻĨāĻžāĻ•āϞ⧇ ECHO āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϕ⧋āύ⧋ āϏāĻŽāĻ¸ā§āϝāĻžāχ āύāĻžāĨ¤ ECHO āĻāϰ āϝ⧇āϏāĻ•āϞ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āĻāϕ⧇ āφāϰ⧋ āĻŦ⧇āĻļāĻŋ āφāĻ•āĻ°ā§āώāĻ¨ā§€ā§Ÿ āĻ•āϰ⧇ āϤ⧁āϞ⧇āϛ⧇ – 
  • āĻ¸ā§āϕ⧇āϞ⧇āĻŦāĻŋāϞāĻŋāϟāĻŋ āĻ“ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏāĨ¤Â 
  • āϞāĻ—āĻŋāĻ‚, āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž, āĻ…āĻĨ⧇āύāϟāĻŋāϕ⧇āĻļāύ⧇āϰ āĻŽāϤ⧋ āĻĒā§āĻ°ā§Ÿā§‹āϜāĻ¨ā§€ā§Ÿ āĻ“ āϏāĻžāϧāĻžāϰāĻŖ āĻŦāĻŋāώ⧟āϗ⧁āϞ⧋āϰ āϜāĻ¨ā§āϝ Middleware āĻāϰ āωāĻĒāĻ¸ā§āĻĨāĻŋāϤāĻŋāĨ¤Â 
  • āϝāĻžāϰāĻž āĻ¸ā§āĻ•ā§āĻ°ā§āϝāĻžāϚ āĻĨ⧇āϕ⧇ API āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻļāĻŋāĻ–āϤ⧇ āϚāĻžāχ āϤāĻžāĻĻ⧇āϰ āϜāĻ¨ā§āϝ āĻāϟāĻŋ āĻĻ⧁āĻ°ā§āĻĻāĻžāĻ¨ā§āϤāĨ¤ āϕ⧇āύāύāĻž, āĻ—āĻŋāϟāĻšāĻžāĻŦ⧇ ⧍ā§Ģ āĻšāĻžāϜāĻžāϰ āĻ¸ā§āϟāĻžāϰ āϏāĻŽā§āĻŦāϞāĻŋāϤ āĻāχ āĻĢā§āϰ⧇āĻŽāĻ“ā§ŸāĻžāĻ°ā§āϕ⧇āϰ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻļāĻžāϞ āχāωāϜāĻžāϰ āĻŦ⧇āϏ āφāϛ⧇ āĻāĻŦāĻ‚ āϏāĻžāĻĨ⧇ āφāϛ⧇ āϏāĻžāϜāĻžāύ⧋, āϗ⧁āĻ›āĻžāύ⧋, āύāĻŋāĻŦ⧇āĻĻāĻŋāϤ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύāĨ¤

āĻĢā§āϰ⧇āĻŽāĻ“ā§ŸāĻžāĻ°ā§āϕ⧇āϰ āĻ…āύ⧇āĻ• āĻ—āĻ­ā§€āϰ⧇ āφāĻŽāϰāĻž āĻĒā§āϰāĻŦ⧇āĻļ āĻ•āϰāĻŦ āύāĻžāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻļāĻž āĻ•āϰāĻž āϝāĻžā§Ÿ āĻāχ āĻĒā§āϰāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻļ⧇āώ⧇ āϕ⧋āύ āĻĒāĻĨ⧇ āφāĻ—āĻžāϤ⧇ āĻšāĻŦ⧇ āϏ⧇āϟāĻž āύāĻŋā§Ÿā§‡ āϕ⧋āύ⧋ āĻĻā§āĻŦāĻŋāϧāĻž āĻĨāĻžāĻ•āĻŦ⧇ āύāĻžāĨ¤ āĻ­āĻŦāĻŋāĻˇā§āĻ¯ā§Ž āĻļ⧇āĻ–āĻžāϰ āĻ¸ā§āϕ⧋āĻĒ āϗ⧁āϞ⧋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻāĻ•āϟāĻž āϧāĻžāϰāĻŖāĻž āĻĻāĻŋā§Ÿā§‡āχ āĻŦ⧁āϟāĻ•ā§āϝāĻžāĻŽā§āĻĒ⧇āϰ āϏāĻŽāĻžāĻĒā§āϤāĻŋ āϟāĻžāύāĻŦā§‹āĨ¤Â 

  • ECHO āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ“ā§Ÿā§‡āĻŦ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϤ⧈āϰāĻŋ (Building a web server using ECHO)
ECHO āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŦā§œā§‹ āĻ•āĻŋāϛ⧁ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āφāϗ⧇ āφāĻŽāϰāĻž āĻāĻ•āĻĻāĻŽ āϛ⧋āĻŸā§āϟ āĻĒāϰāĻŋāϏāϰ⧇ āĻ•āĻŋāϛ⧁ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ ECHO āĻĢā§āϰ⧇āĻŽāĻ“ā§ŸāĻžāĻ°ā§āϕ⧇āϰ āĻŦ⧇āϏāĻŋāĻ• āĻŦāĻŋāώ⧟āϗ⧁āϞ⧋āϤ⧇ āύāĻŋāĻœā§‡āĻĻ⧇āϰ āĻāĻžāϞāĻžāχ āĻ•āϰ⧇ āύ⧇āĻŦā§‹āĨ¤ āϏ⧇āχ āωāĻĻā§āĻĻ⧇āĻļā§āϝ⧇ āĻĒā§āϰāĻĨāĻŽā§‡āχ āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻ“ā§Ÿā§‡āĻŦ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰāĻŦ āϝāĻžāϤ⧇ ⧍ āϟāĻŋ āχāĻ¨ā§āϟāĻŋāϜāĻžāϰ āĻĒāĻžāĻ āĻžāϞ⧇ āϏ⧇āϗ⧁āϞ⧋āϰ āϝ⧋āĻ—āĻĢāϞ, āϗ⧁āĻŖāĻĢāϞ , āĻŦāĻŋā§Ÿā§‹āĻ—āĻĢāϞ āĻāĻŦāĻ‚ āĻ­āĻžāĻ—āĻĢāϞ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦ⧇āĨ¤ āϤāĻžāĻšāϞ⧇ āφāϰ āĻĻ⧇āϰāĻŋ āύāĻž āĻ•āϰ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϝāĻžāĻ• – 
  1. āϝ⧇āĻšā§‡āϤ⧁ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āĻšāϤ⧇ āϝāĻžāĻšā§āϛ⧇, āϏ⧁āϤāϰāĻžāĻ‚ āĻāϰ āϜāĻ¨ā§āϝ main.go āύāĻžāĻŽā§‡āϰ āĻāĻ•āϟāĻŋ āĻĢāĻžāχāϞ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāχ āϝāĻĨ⧇āĻˇā§āϟāĨ¤Â 
  2. āĻāĻŦāĻžāϰ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āϝ⧇ āĻ•āĻžāϜāϟāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϏ⧇āϟāĻŋ āĻšāĻšā§āϛ⧇ āĻĄāĻŋāĻĒ⧇āĻ¨ā§āĻĄā§‡āύāϏāĻŋ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟāĨ¤ āĻāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ āϤ⧇ āĻĸ⧁āϕ⧇āχ āύāĻŋāĻšā§‡āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ⧇ āϰāĻžāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ – 
				
					   go mod init bootcamp-webserver
				
			

āĻāϰ āĻĢāϞ⧇ āĻāĻ•āϟāĻŋ go mod āĻāĻŦāĻ‚ go sum āĻĢāĻžāχāϞ āϤ⧈āϰāĻŋ āĻšāĻŦ⧇ āϝ⧇āĻ–āĻžāύ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āĻ°ā§Ÿā§‹āϜāĻ¨ā§€ā§Ÿ āĻĒā§āϝāĻžāϕ⧇āϜāϗ⧁āϞ⧋āϰ āĻŸā§āĻ°ā§āϝāĻžāĻ• āĻĨāĻžāĻ•āĻŦ⧇āĨ¤Â 

      3. āĻāĻ–āύ āφāĻŽāϰāĻž ECHO āĻĢā§āϰ⧇āĻŽāĻ“ā§ŸāĻžāĻ°ā§āĻ• āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ, āĻāϰ āĻĒā§āϝāĻžāϕ⧇āϜāϟāĻŋ āύāĻžāĻŽāĻžāĻŦā§‹āĨ¤ āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āύāĻŋāĻšā§‡āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ⧇ āϰāĻžāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ – 

				
					   go get github.com/labstack/echo/v4
				
			

     4. āĻāĻ–āύ āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ main.go āĻĢāĻžāχāϞ⧇āϰ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧇, main() āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻŽāĻ§ā§āϝ⧇ echo āĻāϰ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ āϤ⧈āϰāĻŋ āĻ•āϰāĻŋāĨ¤Â 

  • ECHO āĻĒāϰāĻŋāϚāĻŋāϤāĻŋ : 

āĻāĻ•āϟāĻž āϛ⧋āĻŸā§āϟ āϏāĻžāχāĻĄ āĻŽāĻŋāĻļāύ⧇ āϝāĻžāĻšā§āĻ›āĻŋ ECHO āĻĢā§āϰ⧇āĻŽāĻ“ā§ŸāĻžāĻ°ā§āϕ⧇āϰ āĻ•āĻŋāϛ⧁ āĻŦ⧇āϏāĻŋāϕ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒāϰāĻŋāϚāĻŋāϤ āĻšāϤ⧇ āϝāĻž āφāĻŽāĻžāĻĻ⧇āϰ āφāĻĒāĻžāϤāϤ āĻŦ⧁āĻā§‡ āĻļ⧁āϰ⧁ āĻšāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰāĻŦ⧇āĨ¤

 āωāĻĒāϰ⧇āϰ echo.New() āĻĢāĻžāĻ‚āĻļāύ āĻ•āϞ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāĻ•āϟāĻŋ echo.Echo āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ⧇āϰ āĻĒā§Ÿā§‡āĻ¨ā§āϟāĻžāϰ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻĒāĻžāĻ“ā§ŸāĻž āϝāĻžā§Ÿ, āϝ⧇āϟāĻž āĻāχ āĻĒā§āϰāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻļ⧁āϰ⧁āϰ āϜāĻžā§ŸāĻ—āĻž āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤ āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻĒā§āϰāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āϏāĻŦ routes, middleware āĻāĻŦāĻ‚ HTTP āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻ“ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āύāĻŋā§Ÿā§‡ āĻ•āĻžāĻœā§‡āϰ āϜāĻ¨ā§āϝ āĻāχ echo.Echo āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšā§ŸāĨ¤ āϝ⧇āĻŽāύ, echo.GET(), echo.GROUP(), echo.Context() āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āĻĢāĻžāĻ‚āĻļāύāĨ¤ āĻāĻĻ⧇āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āϏāĻžāĻŽāύ⧇ āĻ¯ā§‡ā§Ÿā§‡ āφāĻŽāϰāĻž āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦā§‹āĨ¤ āφāĻŦāĻžāϰ āϤāĻžāĻšāϞ⧇ āϕ⧋āĻĄā§‡ āĻĢ⧇āϰāϤ āϝāĻžāĻ“ā§ŸāĻž āϝāĻžāĻ•āĨ¤

     5. āĻāĻ•āϟāĻŋ Route āϤ⧈āϰāĻŋ āĻ•āϰāĻŋ GET āĻŽā§‡āĻĨāĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āϝāĻžāϤ⧇ āφāĻŽāϰāĻž āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ ⧍ āϟāĻŋ āϏāĻ‚āĻ–ā§āϝāĻž āĻĒāĻžāĻ āĻžāĻŦā§‹āĨ¤ āĻāĻ•āϟāĻŋ Route āĻ āϝ⧇ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāĻŦ⧇, āϏ⧇āϟāĻŋāϤ⧇ echo.Context āĻ…āĻŦāĻœā§‡āĻ•ā§āϟāϟāĻŋ āϚāϞ⧇ āϝāĻžāĻŦ⧇ āĻāĻŦāĻ‚ āĻāχ Context āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻŽāĻ§ā§āϝ⧇āχ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āĻŸā§‡āϰ āϏāĻ•āϞ āχāύāĻĢāϰāĻŽā§‡āĻļāύ āωāĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻĨāĻžāĻ•āĻŦ⧇āĨ¤ āϝ⧇āĻŽāύ, āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻ­ā§āϝāĻžāϞ⧁, URL. 

     6.  āĻāχ Route āĻāϰ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰ āĻĢāĻžāĻ‚āĻļāύ āĻšāĻŋāϏ⧇āĻŦ⧇, āĻāχ āĻĒā§āϝāĻžāϕ⧇āĻœā§‡āϰ āĻŽāĻ§ā§āϝ⧇āχ Calculation() āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāĻŋāĨ¤ āϤāĻžāĻšāϞ⧇ āφāĻŽāĻžāĻĻ⧇āϰ main() āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āĻĻāĻžāρ⧜āĻžāĻšā§āϛ⧇ – 

				
					 func main() {
       /* New Echo instance */
       e := echo.New()
       /* Route with GET method*/
       e.GET("/calculate", Calculation)
   }

				
			

    7.  āĻāĻ–āύ āĻāĻ•āϟāĻŋ Struct āϤ⧈āϰāĻŋ āĻ•āϰāĻŦ Result āύāĻžāĻŽā§‡āϰāĨ¤ āĻāϰ āĻŽāĻ§ā§āϝ⧇ āφāĻŽāϰāĻž āϝ⧋āĻ—āĻĢāϞ, āϗ⧁āĻŖāĻĢāϞ , āĻŦāĻŋā§Ÿā§‹āĻ—āĻĢāϞ āĻāĻŦāĻ‚ āĻ­āĻžāĻ—āĻĢāϞ⧇āϰ āĻ­ā§āϝāĻžāϞ⧁āϗ⧁āϞ⧋ āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰāĻŦ āĻāĻŦāĻ‚ āϏāĻŦāĻļ⧇āώ⧇ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦ – 

				
					   type Result struct {
       Addition       int
       Subtraction    int
       Multiplication int
       Division       int
   }

				
			

    8.  āĻāĻŦāĻžāϰ⧇ āĻĒāĻžāϞāĻž āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰ āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰāĨ¤ āĻĒā§āϰāĻĨāĻŽā§‡āχ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻĨ⧇āϕ⧇ ⧍ āϟāĻŋ āĻ­ā§āϝāĻžāϞ⧁ num1 āĻāĻŦāĻ‚ num2 āĻāϰ āĻ­ā§āϝāĻžāϞ⧁ āύāĻŋā§Ÿā§‡ āϏ⧇āϗ⧁āϞ⧋ āĻĒāĻžāĻ°ā§āϏ āĻ•āϰ⧇ āχāĻ¨ā§āϟāĻŋāϜāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ a āĻāĻŦāĻ‚ b āϤ⧇ āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰāĻŦ – 

  • āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰ āĻĢāĻžāĻ‚āĻļāύ āĻāĻŦāĻ‚ echo.Context āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻĒāϰāĻŋāϚāĻŋāĻ¤Â 

āĻāĻ–āĻžāύ⧇ āĻĒā§āϰāĻ¤ā§āϝ⧇āĻ•āϟāĻŋ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰ āĻĢāĻžāĻ‚āĻļāύ⧇ āφāĻŽāϰāĻž echo.Context āύāĻžāĻŽāĻ• āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻĒāĻžāϏ āĻ•āϰ⧇āĻ›āĻŋāĨ¤ āĻāχ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āϏāĻ°ā§āĻŦāĻļ⧇āώ HTTP āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āĻŸā§‡āϰ āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ/āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ, āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻšā§‡āĻĄāĻžāϰ, URL āĻāϰ āϤāĻĨā§āϝāĻžāĻĻāĻŋ, āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ, āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻ…āĻĨāĻŦāĻž āĻĢāĻ°ā§āĻŽ āĻĄāĻžāϟāĻž āĻĨāĻžāϕ⧇ āĻāĻŦāĻ‚ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰ āĻĢāĻžāĻ‚āĻļāύ āĻāϗ⧁āϞ⧋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϰ⧇āϏāĻĒāĻ¨ā§āϏ, āĻ­ā§āϝāϞāĻŋāĻĄā§‡āĻļāύ , āĻ…āĻĨ⧇āύāϟāĻŋāϕ⧇āĻļāύ, āϞāĻ—āĻŋāĻ‚ āĻāϰ āĻŽāϤ⧋ āϝāĻžāĻŦāĻ¤ā§€ā§Ÿ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āφāĻŽāϰāĻžāĻ“ āĻāϰāĻ•āĻŽ āĻ•āĻŋāϛ⧁ āĻĒāϰāĻŦāĻ°ā§āϤ⧀āϤ⧇ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āĻ•āϰāĻŦāĨ¤ āφāĻĒāĻžāϤāϤ āφāĻŽāϰāĻž āχāĻ¨ā§āϟāĻžāϰāĻĢ⧇āϏ⧇āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒāϰāĻŋāϚāĻŋāϤ āĻšāĻŦā§‹āĨ¤Â Â 

				
					 func Calculation(c echo.Context) error {
       num1 := c.QueryParam("num1")
       a, err := strconv.Atoi(num1)
       if err != nil {
           return c.JSON(http.StatusInternalServerError, err)
       }
       num2 := c.QueryParam("num2")
       b, err := strconv.Atoi(num2)
       if err != nil {
           return c.JSON(http.StatusInternalServerError, err)
       }
   }

				
			

   9.  āĻāĻŦāĻžāϰ⧇ āϝ⧋āĻ—āĻĢāϞ, āϗ⧁āĻŖāĻĢāϞ , āĻŦāĻŋā§Ÿā§‹āĻ—āĻĢāϞ āĻāĻŦāĻ‚ āĻ­āĻžāĻ—āĻĢāϞ⧇āϰ Result āĻāϰ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ⧇ āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰāĻŦ – 

				
					

   result := Result{
       Addition:       a + b,
       Subtraction:    a - b,
       Multiplication: a * b,
       Division:       a / b,
   }

				
			

    10.  āϏāĻŦāĻļ⧇āώ⧇ result āϕ⧇ JSON āφāĻ•āĻžāϰ⧇ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇ āĻĻ⧇āĻŦā§‹ āĻāĻŦāĻ‚ main() āĻĢāĻžāĻ‚āĻļāύ āĻĨ⧇āϕ⧇ āϏāĻžāĻ°ā§āĻ­āĻžāϰ start āĻ•āϰāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ“ā§Ÿā§‡āĻŦ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϤ⧈āϰāĻŋāϰ āĻ•āĻžāϜāϟāĻŋ āϏāĻŽā§āĻĒāĻ¨ā§āύ āĻ•āϰāĻŦāĨ¤ āϤāĻžāĻšāϞ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ“ā§Ÿā§‡āĻŦ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϕ⧋āĻĄāϟāĻŋ āĻĻāĻžāρ⧜āĻžāĻšā§āϛ⧇ –

				
					package main

   import (
       "net/http"
       "strconv"

       "github.com/labstack/echo/v4"
   )
   type Result struct {
       Addition       int
       Subtraction    int
       Multiplication int
       Division       int
   }

   func Calculation(c echo.Context) error {
       num1 := c.QueryParam("num1")
       a, err := strconv.Atoi(num1)
       if err != nil {
           return c.JSON(http.StatusInternalServerError, err)
       }
       num2 := c.QueryParam("num2")
       b, err := strconv.Atoi(num2)
       if err != nil {
           return c.JSON(http.StatusInternalServerError, err)
       }
       result := Result{
           Addition:       a + b,
           Subtraction:    a - b,
           Multiplication: a * b,
           Division:       a / b,
       }
       return c.JSON(http.StatusOK, result)
   }

   func main() {
       /* New Echo instance */
       e := echo.New()
       /* Route with GET method*/
       e.GET("/calculate", Calculation)
       // web server start
       e.Logger.Fatal(e.Start(":8080"))
   }

				
			

Postman āĻāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ – 

“localhost:8080/calculate” route āĻ āĻ•ā§ā§Ÿā§‡āϰāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āϏāĻš āĻĒāĻžāĻ āĻžāύ⧋ GET āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āĻŸā§‡āϰ āĻĢāĻžāχāύāĻžāϞ āĻ—āĻ āύāϟāĻŋ āĻšāϞ⧋ – “localhost:8080/calculate?num1=5&num2=6” 

āϰ⧇āϏāĻĒāĻ¨ā§āϏ –

				
					   {
       "Addition": 11,
       "Subtraction": -1,
       "Multiplication": 30,
       "Division": 0
   }

				
			
  • ECHO āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āĻĻāĻŽ āĻŦ⧇āϏāĻŋāĻ• CRUD āĻĢāĻžāĻ‚āĻļāύāĻžāϞāĻŋāϟāĻŋ āϤ⧈āϰāĻŋ (Basic CRUD with ECHO)

āωāĻĒāϰ⧇āϰ āĻ“ā§Ÿā§‡āĻŦ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϟāĻŋ āĻŦāĻžāύāĻŋā§Ÿā§‡ āφāĻŽāϰāĻž ECHO āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ Route āϤ⧈āϰāĻŋ, āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ“ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻ•āϰāĻžāϰ āĻŽāϤ⧋ āĻŽā§ŒāϞāĻŋāĻ• āĻŦāĻŋāώ⧟āϗ⧁āϞ⧋āϰ āϏāĻžāĻĨ⧇ āĻĒāϰāĻŋāϚāĻŋāϤ āĻšā§Ÿā§‡āĻ›āĻŋāĨ¤ āϝ⧇āĻšā§‡āϤ⧁ āĻŦ⧁āϟāĻ•ā§āϝāĻžāĻŽā§āĻĒ⧇āϰ āĻāχ āĻ…āĻ‚āĻļ⧇ āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āĻĒāĻ°ā§āϝāĻžā§Ÿā§‡āϰ CRUD āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āĻ•āϰāĻŦ, āϏ⧇āĻšā§‡āϤ⧁ āĻāϰ āφāϗ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻ•āĻĻāĻŽ āϏāĻžāϧāĻžāϰāĻŖāĻ­āĻžāĻŦ⧇ CRUD āĻāϰ āĻ•āĻŋ āĻ•āĻŋāϛ⧁ āĻĢāĻžāĻ‚āĻļāύāĻžāϞāĻŋāϟāĻŋāϰ āĻĒā§āĻ°ā§Ÿā§‹āĻ— āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϧāĻžāϰāĻŖāĻž āϞāĻžāĻ­ āĻ•āϰāĻž āωāϚāĻŋāϤāĨ¤ āĻāϤ⧇ āĻ•āϰ⧇ āφāĻŽāϰāĻž āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āĻ¸ā§āĻŸā§āϰāĻžāĻ•āϚāĻžāϰ⧇āϰ āĻĒā§āĻ°ā§Ÿā§‹āϜāĻ¨ā§€ā§ŸāϤāĻž āφāϰ⧋ āĻ­āĻžāϞ⧋āĻ­āĻžāĻŦ⧇ āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰāĻŦ āĻāĻŦāĻ‚ āĻāĻ•āχ āϏāĻžāĻĨ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻāϟāĻžāĻ“ āĻŽāύ⧇ āĻšāĻŦ⧇ āύāĻž āϝ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻļ⧇āĻ–āĻžāϰ āĻĒāĻĨ⧇ āĻ•āĻŋāϛ⧁ āĻŦāĻžāĻĻ āĻĒā§œā§‡āϛ⧇āĨ¤Â 

āĻāχ āĻĒā§āϰāĻœā§‡āĻ•ā§āĻŸā§‡ āφāĻŽāϰāĻž āĻāĻ• āĻĢāĻžāχāϞ⧇āϰ āϭ⧇āϤāϰ⧇āχ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻŸā§‡āĻŦāĻŋāϞ, āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻāĻŦāĻ‚ āϏāĻžāĻĨ⧇ User āĻāϰ Create, Read āĻāĻŦāĻ‚ Delete āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰ āĻĢāĻžāĻ‚āĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰāĻŦ āĻāĻŦāĻ‚ JSON āĻšāĻŋāϏ⧇āĻŦ⧇ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦāĨ¤ āϤāĻžāĻšāϞ⧇ āφāϰ āĻĻ⧇āϰāĻŋ āύāĻž āĻ•āϰ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϝāĻžāĻ• – 

  • āĻļ⧁āϰ⧁āϤ⧇āχ, āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻšāĻšā§āϛ⧇ āĻĄāĻŋāĻĒ⧇āĻ¨ā§āĻĄā§‡āύāϏāĻŋ āĻŽā§āϝāĻžāύ⧇āϜāĻŽā§‡āĻ¨ā§āϟ āύāĻŋā§Ÿā§‡āĨ¤ āĻāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ āϤ⧇ āĻĸ⧁āϕ⧇āχ āύāĻŋāĻšā§‡āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ⧇ āϰāĻžāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ –
				
					    go mod init simple-functionality
				
			
  • āĻāχ āĻĒā§āϰāĻœā§‡āĻ•ā§āĻŸā§‡ āϝ⧇āĻšā§‡āϤ⧁ āφāĻŽāϰāĻž GORM āĻāĻŦāĻ‚ MySQL āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ•āĻžāϜ āĻ•āϰāĻŦāĨ¤ āϏ⧁āϤāϰāĻžāĻ‚ āĻļ⧁āϰ⧁āϤ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻāχ āĻĒā§āϝāĻžāϕ⧇āϜ āĻĻ⧁āϟāĻŋ āύāĻžāĻŽāĻŋā§Ÿā§‡ āύāĻŋāϤ⧇ āĻšāĻŦ⧇āĨ¤ āĻāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻšā§‡āϰ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĻ⧁āϟāĻŋ āϟāĻžāĻ°ā§āĻŽāĻŋāύāĻžāϞ⧇ āϰāĻžāύ āĻ•āϰāĻŦ –
				
					  go get gorm.io/gorm
   go get -u gorm.io/driver/mysql
				
			
  • āĻāĻŦāĻžāϰ⧇ āφāĻŽāϰāĻž āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻ•āĻžāύ⧇āĻ•ā§āϟ āĻ•āϰāĻŦāĨ¤ āĻāϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ•āĻžāύ⧇āĻ•āĻļāύ string āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āĻĒā§āĻ°ā§Ÿā§‹āϜāĻ¨ā§€ā§Ÿ āϏāĻ•āϞ āϤāĻĨā§āϝ āĻĒāĻžāϏ āĻ•āϰ⧇ āĻĻ⧇āĻŦā§‹ āĻāĻŦāĻ‚ āĻāχ āĻ…āύ⧁āϝāĻžā§Ÿā§€ *gorm.DB āĻāϰ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ āϤ⧈āϰāĻŋ āĻšāĻŦ⧇āĨ¤ āĻāχ āĻ•āĻžāϜāϟāĻŋ main() āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧇ āĻ•āϰāĻŦāĨ¤ āϤāĻžāϰ āφāϗ⧇ *gorm.DB āĻāϰ āĻāĻ•āϟāĻŋ āĻāĻŽā§āĻĒāϟāĻŋ āĻ­ā§āϝāĻžāϰāĻŋā§Ÿā§‡āĻŦāϞ āĻ—ā§āϞ⧋āĻŦāĻžāϞāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āϰāĻžāĻ–āĻŦāĨ¤ āϝāĻžāϤ⧇ āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰāĻžāĻĒā§āϤ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏāϟāĻŋ āĻ—ā§āϞ⧋āĻŦāĻžāϞāĻŋ āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ- 
				
					   var DB *gorm.DB
   func main() {
       e := echo.New()

       // Initiate DB
       dsn := "root:191491@tcp(127.0.0.1:3306)/basiccrud?charset=utf8mb4&parseTime=True&loc=Local"
       d, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
       if err != nil {
           panic(err)
       }
       DB = d
   }

				
			
  • āĻāĻ•āϟāĻŋ Struct āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āύ⧇āχ āϝ⧇āϟāĻž āφāĻŽāĻžāĻĻ⧇āϰ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŸā§‡āĻŦāĻŋāϞ āĻ¸ā§āĻ•āĻŋāĻŽāĻž āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰāĻŦ⧇āĨ¤ āĻāχ āĻ•āĻžāϜāϟāĻŋ āφāĻŽāϰāĻž āĻāϰ āφāϗ⧇ ORM āĻ…āĻ‚āĻļ⧇ āĻļāĻŋāϖ⧇ āĻāϏ⧇āĻ›āĻŋ –  
				
					   type User struct {
       ID   int    `gorm:"primaryKey" json:"id"`
       Name string `json:"name"`
       Age  int    `json:"age"`
   }

				
			
  • āĻāĻŦāĻžāϰ⧇ GORM āĻāϰ āĻ…āĻŸā§‹ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŸā§‡āĻŦāĻŋāϞāϟāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāĻŦ –
				
					

   // Create and migrate db
   DB.AutoMigrate(&User{})
				
			
  • āφāĻŽāĻžāĻĻ⧇āϰ Route āϗ⧁āϞ⧋ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āύ⧇āĻŦā§‹ āĻāĻŦāĻ‚ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻžāϰ āĻĢāĻžāĻ‚āĻļāύ āϗ⧁āϞ⧋ āĻ…ā§āϝāĻžāϏāĻžāχāύ āĻ•āϰ⧇ āĻĻ⧇āĻŦā§‹ –
				
					

   // Routes
   e.GET("/users", GetAllUsers)
   e.POST("/users", CreateUser)
   e.DELETE("/users/:id", DeleteUser)
				
			
  • āĻĒā§āϰāĻĨāĻŽā§‡āχ āĻ•āĻžāϜ āĻļ⧁āϰ⧁ āĻ•āϰāĻŦ CreateUser() āĻĢāĻžāĻ‚āĻļāύ āύāĻŋā§Ÿā§‡āĨ¤ āύāϤ⧁āύ User āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āĻ°ā§Ÿā§‹āϜāĻ¨ā§€ā§Ÿ āϝ⧇ āχāύāĻĒ⧁āϟ āϗ⧁āϞ⧋ āφāϛ⧇ āϏ⧇āϗ⧁āϞ⧋ User āϟāĻžāχāĻĒ⧇āϰ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϏāĻŸā§āϝāĻžāĻ¨ā§āϏ⧇ āĻŦāĻžāχāĻ¨ā§āĻĄ āĻ•āϰ⧇ āύ⧇āĻŦā§‹ āĻāĻŦāĻ‚ GORM āĻāϰ Create() āĻŽā§‡āĻĨāĻĄ āĻŦā§āϝāĻžāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āύāϤ⧁āύ User āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āϏāĻžāĻ•āϏ⧇āϏ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦ⧇āĨ¤ āĻŽāĻžāĻā§‡ āϕ⧋āύ⧋ āĻāϰāϰ⧇āϰ āϏāĻŽā§āĻŽā§āĻ–ā§€āύ āĻšāϞ⧇ āϤāĻž āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇ āϰ⧇āϏāĻĒāĻ¨ā§āϏ⧇ āĻĒāĻžāĻ āĻŋā§Ÿā§‡ āĻĻ⧇āĻŦā§‹ – 
				
					   func CreateUser(c echo.Context) error {
       user := &User{}
       if err := c.Bind(user); err != nil {
           return c.JSON(http.StatusBadRequest, err.Error())
       }
       if err := DB.Create(&user).Error; err != nil {
           return c.JSON(http.StatusInternalServerError, err.Error())
       }
       return c.JSON(http.StatusCreated, "User created successfully")
   }

				
			
  •  āĻāϰāĻĒāϰ āĻ•āĻžāϜ āĻ•āϰāĻŦ GetAllUsers() āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āύāĻŋā§Ÿā§‡āĨ¤ āĻļ⧁āϰ⧁āϤ⧇āχ āĻāĻ•āϟāĻŋ User āϟāĻžāχāĻĒ⧇āϰ āĻ…ā§āϝāĻžāϰ⧇ āύ⧇āĻŦā§‹, āϝ⧇āϟāĻžā§Ÿ āφāĻŽāĻžāĻĻ⧇āϰ āϰ⧇āϏāĻĒāĻ¨ā§āϏ⧇ āφāϏāĻž āϏāĻ•āϞ User āĻāϰ āϰ⧇āĻ•āĻ°ā§āĻĄ āϰāĻžāĻ–āĻž āĻšāĻŦ⧇āĨ¤ GORM āĻāϰ Find() āĻŽā§‡āĻĨāĻĄ āĻŦā§āϝāĻžāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏāĻ•āϞ User āĻāϰ āϰ⧇āĻ•āĻ°ā§āĻĄ users āĻ…ā§āϝāĻžāϰ⧇ āϤ⧇ āϰāĻžāĻ–āĻŦ āĻāĻŦāĻ‚ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻšāĻŋāϏ⧇āĻŦ⧇ User āĻāϰ āĻāχ āĻ•āĻžāϞ⧇āĻ•āĻļāύāϟāĻŋ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦāĨ¤ āĻŽāĻžāĻā§‡ āϕ⧋āύ⧋ āĻāϰāϰ⧇āϰ āϏāĻŽā§āĻŽā§āĻ–ā§€āύ āĻšāϞ⧇ āϤāĻž āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇ āϰ⧇āϏāĻĒāĻ¨ā§āϏ⧇ āĻĒāĻžāĻ āĻŋā§Ÿā§‡ āĻĻ⧇āĻŦā§‹ –
				
					   func GetAllUsers(c echo.Context) error {
       var users []User
       if err := DB.Find(&users).Error; err != nil {
           return c.JSON(http.StatusInternalServerError, err.Error())
       }
       return c.JSON(http.StatusOK, users)
   }

				
			
  • āϏāĻŦāĻļ⧇āώ⧇ āφāĻŽāϰāĻž āĻ•āĻžāϜ āĻ•āϰāĻŦ DeleteUser() āĻĢāĻžāĻ‚āĻļāύāϟāĻŋ āύāĻŋā§Ÿā§‡āĨ¤ āĻĒā§āϰāĻĨāĻŽā§‡āχ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻ­ā§āϝāĻžāϞ⧁ āĻĨ⧇āϕ⧇ id āĻāϰ āĻ­ā§āϝāĻžāϞ⧁ āύāĻŋā§Ÿā§‡ āϤāĻž āĻĒāĻžāĻ°ā§āϏ āĻ•āϰ⧇ āχāĻ¨ā§āϟāĻŋāϜāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ ID āϤ⧇ āĻ¸ā§āĻŸā§‹āϰ āĻ•āϰāĻŦāĨ¤ GORM āĻāϰ Delete() āĻŽā§‡āĻĨāĻĄ āĻŦā§āϝāĻžāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āωāĻ•ā§āϤ ID āϏāĻŽā§āĻŦāϞāĻŋāϤ User āϕ⧇ āĻŸā§‡āĻŦāĻŋāϞ āĻĨ⧇āϕ⧇ āĻĄāĻŋāϞ⧇āϟ āĻ•āϰ⧇ āĻĻ⧇āĻŦā§‹ āĻāĻŦāĻ‚ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻāĻ•āϟāĻŋ āϏāĻžāĻ•āϏ⧇āϏ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻĒāĻžāĻ āĻžāĻŦā§‹āĨ¤ āĻŽāĻžāĻā§‡ āϕ⧋āύ⧋ āĻāϰāϰ⧇āϰ āϏāĻŽā§āĻŽā§āĻ–ā§€āύ āĻšāϞ⧇ āϤāĻž āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇ āϰ⧇āϏāĻĒāĻ¨ā§āϏ⧇ āĻĒāĻžāĻ āĻŋā§Ÿā§‡ āĻĻ⧇āĻŦā§‹ –
				
					func DeleteUser(c echo.Context) error {
       var user User
       id := c.Param("id")

       ID, err := strconv.ParseInt(id, 0, 0)
       if err != nil {
           return c.JSON(http.StatusInternalServerError, err.Error())
       }

       if err := DB.Where("id = ?", ID).Delete(&user).Error; err != nil {
           return c.JSON(http.StatusInternalServerError, err.Error())
       }

       return c.JSON(http.StatusOK, "User deleted successfully")
   }

				
			
  • āĻāĻŦāĻžāϰ⧇ main() āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āϭ⧇āϤāϰ āĻĨ⧇āϕ⧇ āϏāĻžāĻ°ā§āĻ­āĻžāϰāϟāĻŋ āĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻ•āϰāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āφāĻŽāĻžāĻĻ⧇āϰ āĻāχ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟāϟāĻŋ āĻļ⧇āώ āĻšāĻŦ⧇ –
				
					 // Start server
   e.Logger.Fatal(e.Start(":1111"))
				
			
  • āϤāĻžāĻšāϞ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒ⧁āϰ⧋ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟāϟāĻŋ āĻĻāĻžāρ⧜āĻžāĻšā§āϛ⧇ – 
				
					package main

   import (
       "net/http"
       "strconv"

       "github.com/labstack/echo/v4"
       "gorm.io/driver/mysql"
       "gorm.io/gorm"
   )

   type User struct {
       ID   int    `gorm:"primaryKey" json:"id"`
       Name string `json:"name"`
       Age  int    `json:"age"`
   }

   var DB *gorm.DB

   func CreateUser(c echo.Context) error {
       user := &User{}
       if err := c.Bind(user); err != nil {
           return c.JSON(http.StatusBadRequest, err.Error())
       }

       if err := DB.Create(&user).Error; err != nil {
           return c.JSON(http.StatusInternalServerError, err.Error())
       }
       return c.JSON(http.StatusCreated, "User created successfully")
   }

   func GetAllUsers(c echo.Context) error {
       var users []User
       if err := DB.Find(&users).Error; err != nil {
           return c.JSON(http.StatusInternalServerError, err.Error())
       }
       return c.JSON(http.StatusOK, users)
   }


   func DeleteUser(c echo.Context) error {
       var user User
       id := c.Param("id")
       ID, err := strconv.ParseInt(id, 0, 0)
       if err != nil {
           return c.JSON(http.StatusInternalServerError, err.Error())
       }


       if err := DB.Where("id = ?", ID).Delete(&user).Error; err != nil {
           return c.JSON(http.StatusInternalServerError, err.Error())
       }
       return c.JSON(http.StatusOK, "User deleted successfully")
   }


   func main() {
       e := echo.New()
       // Initiate DB
       dsn := "root:191491@tcp(127.0.0.1:3306)/basiccrud?charset=utf8mb4&parseTime=True&loc=Local"
       d, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
       if err != nil {
           panic(err)
       }
       DB = d
       // Create and migrate db
       DB.AutoMigrate(&User{}
       // Routes
       e.GET("/users", GetAllUsers)
       e.POST("/users", CreateUser)
       e.DELETE("/users/:id", DeleteUser)
       // Start server
       e.Logger.Fatal(e.Start(":1111"))
   }

				
			

Postman āĻāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ – 

Create āĻāϰ āϜāĻ¨ā§āϝ – 

“localhost:1111/users” route āĻ āύāĻŋāĻšā§‡āϰ json āĻ­ā§āϝāĻžāϞ⧁āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ POST āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻĻā§‡ā§ŸāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡, āφāĻŽāϰāĻž Create āĻĢāĻžāĻ‚āĻļāύāĻžāϞāĻŋāϟāĻŋ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻļ⧇āώ āĻ•āϰāϤ⧇ āĻĒ⧇āϰ⧇āĻ›āĻŋ āĻ•āĻŋāύāĻž āϤāĻž āĻšā§‡āĻ• āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ –

				
					   {
       "name": "Raisul Islam",
       "age": 23
   }

				
			

āϝāĻĻāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āϕ⧋āĻĄ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻĨāĻžāϕ⧇ āϤāĻžāĻšāϞ⧇ Postman āĻ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āφāϏāĻŦ⧇ “User created successfully“

āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻšāĻŋāϏ⧇āĻŦ⧇ āύāĻŋāĻšā§‡āϰ āĻ›āĻŦāĻŋ āϟāĻž āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰāĻŋ – 

Read āĻāϰ āϜāĻ¨ā§āϝ – 

“localhost:1111/users” route āĻ GET āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻĒāĻžāĻ āĻŋā§Ÿā§‡ āφāĻŽāϰāĻž Read āĻĢāĻžāĻ‚āĻļāύāĻžāϞāĻŋāϟāĻŋ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻļ⧇āώ āĻ•āϰāϤ⧇ āĻĒ⧇āϰ⧇āĻ›āĻŋ āĻ•āĻŋāύāĻž āϤāĻž āĻšā§‡āĻ• āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤

āϰ⧇āϏāĻĒāĻ¨ā§āϏ –

				
					

   [
       {
           "id": 1,
           "name": "Raisul Islam",
           "age": 23
       },
   ]

				
			

āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻšāĻŋāϏ⧇āĻŦ⧇ āύāĻŋāĻšā§‡āϰ āĻ›āĻŦāĻŋ āϟāĻž āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰāĻŋ – 

Delete āĻāϰ āϜāĻ¨ā§āϝ – 

“localhost:1111/users/1” route āĻ DELETE āϰāĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āϟ āĻĒāĻžāĻ āĻŋā§Ÿā§‡ āφāĻŽāϰāĻž DELETE āĻĢāĻžāĻ‚āĻļāύāĻžāϞāĻŋāϟāĻŋ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻļ⧇āώ āĻ•āϰāϤ⧇ āĻĒ⧇āϰ⧇āĻ›āĻŋ āĻ•āĻŋāύāĻž āϤāĻž āĻšā§‡āĻ• āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ – 

āϝāĻĻāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āϕ⧋āĻĄ āĻ āĻŋāĻ•āĻ āĻžāĻ• āĻĨāĻžāϕ⧇ āϤāĻžāĻšāϞ⧇ Postman āĻ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āφāϏāĻŦ⧇ “User deleted successfully” āĻāĻŦāĻ‚ āφāĻŽāĻžāĻĻ⧇āϰ ID = 1 āχāωāϜāĻžāϰ⧇āϰ āϏāĻŦ āĻ­ā§āϝāĻžāϞ⧁ Delete āĻšā§Ÿā§‡ āϝāĻžāĻŦ⧇ āĨ¤

āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻšāĻŋāϏ⧇āĻŦ⧇ āύāĻŋāĻšā§‡āϰ āĻ›āĻŦāĻŋ āϟāĻž āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰāĻŋ – 

āĻĒā§āϰāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āϧāĻžāĻĒāϗ⧁āϞ⧋ āĻŦāĻ°ā§āĻŖāύāĻžāϰ āϏāĻŽā§Ÿ, āĻ•āĻŋāϛ⧁ āĻŦāĻŋāĻˇā§Ÿā§‡ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻĻā§‡ā§ŸāĻž āĻšā§ŸāύāĻŋāĨ¤ āϕ⧇āύāύāĻž āφāĻŽāϰāĻž āĻāϏāĻ•āϞ āĻŦāĻŋāώ⧟ āĻŦ⧁āϟāĻ•ā§āϝāĻžāĻŽā§āĻĒ⧇āϰ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻ…āĻ‚āĻļ⧇ āĻœā§‡āύ⧇ āĻāϏ⧇āĻ›āĻŋāĨ¤ āφāĻļāĻž āĻ•āϰāĻ›āĻŋ, āĻāχ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟāϟāĻŋ āĻ•āϰāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻĒā§āϰāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻ•āĻžāϜāϗ⧁āϞ⧋ āφāĻŽāĻžāĻĻ⧇āϰ āĻ•āĻžāϛ⧇ āφāϰ⧋ āϏāĻšāϜ āĻāĻŦāĻ‚ āĻŦā§‹āϧāĻ—āĻŽā§āϝ āĻšāĻŦ⧇āĨ¤ āϤāĻžāĻšāϞ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāĻ›āĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āĻŦ⧁āϟāĻ•ā§āϝāĻžāĻŽā§āĻĒ⧇āϰ āĻĒā§āϰāϧāĻžāύ āĻāĻŦāĻ‚ āϏāĻ°ā§āĻŦāĻļ⧇āώ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟāϟāĻŋ…Â