Vivasoft-logo

[ā§Ž.ā§Ē] āĻĒā§āĻ°āĻœā§‡āĻ•ā§āĻŸ āĻ¤ā§ˆāĻ°āĻŋāĻ° āĻ°ā§‹āĻĄāĻŽā§āĻ¯āĻžāĻĒ āĻāĻŦāĻ‚ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ (Detailed project roadmap)

[ā§Ž.ā§Ē.ā§§] āĻāĻ¨āĻ­āĻžā§ŸāĻ°āĻ¨āĻŽā§‡āĻ¨ā§āĻŸ āĻ­ā§āĻ¯āĻžāĻ°āĻŋā§Ÿā§‡āĻŦāĻ˛ āĻ āĻŋāĻ• āĻ•āĻ°āĻž

āĻ•āĻŋāĻ›ā§ āĻ•āĻŋāĻ›ā§ āĻ‡āĻ¨āĻĢāĻ°āĻŽā§‡āĻļāĻ¨ āĻ¸āĻŦāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻ˛āĻžāĻĻāĻž āĻšāĻ“ā§ŸāĻžāĻŸāĻž āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ•āĨ¤ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻ†āĻŽāĻ°āĻž āĻ•āĻŋāĻ›ā§ āĻĒā§āĻ°āĻœā§‡āĻ•ā§āĻŸ āĻ‡āĻ¨āĻĢāĻ°āĻŽā§‡āĻļāĻ¨ āĻļā§‡ā§ŸāĻžāĻ° āĻ“ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡āĻŦā§‹ āĻ¨āĻžāĨ¤ āĻ¯ā§‡āĻŽāĻ¨, āĻ†āĻŽāĻžāĻĻā§‡āĻ° MySQL āĻĒā§āĻ°ā§‹āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻ¯āĻžāĻŦāĻ¤ā§€ā§ŸāĨ¤ āĻ¤āĻžāĻ›āĻžā§œāĻž āĻ†āĻŽāĻ°āĻž āĻšāĻžāĻ‡āĻŦā§‹ āĻĒā§āĻ°āĻœā§‡āĻ•ā§āĻŸ āĻ°āĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒā§āĻ°ā§Ÿā§‹āĻœāĻ¨ā§€ā§Ÿ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§€āĻ˛ āĻ­ā§āĻ¯āĻžāĻ˛ā§āĻ—ā§āĻ˛ā§‹āĻ•ā§‡ āĻāĻŽāĻ¨ āĻ­āĻžāĻŦā§‡ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻ¤ā§‡, āĻ¯āĻžāĻ¤ā§‡ āĻ•āĻ°ā§‡ āĻ¯ā§‡ āĻ•ā§‡āĻ“ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻœā§‡āĻ•ā§āĻŸ āĻ¨āĻžāĻŽāĻŋā§Ÿā§‡ āĻ°āĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœā§‡āĻĻā§‡āĻ° āĻĄāĻŋāĻ­āĻžāĻ‡āĻ¸ā§‡āĨ¤ āĻāĻ¨āĻ­āĻžā§ŸāĻ°āĻ¨āĻŽā§‡āĻ¨ā§āĻŸ āĻ­ā§āĻ¯āĻžāĻ°āĻŋā§Ÿā§‡āĻŦāĻ˛ āĻ¸ā§‡āĻ‡ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻŸāĻžāĻ‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĻāĻŋā§Ÿā§‡ āĻĨāĻžāĻ•ā§‡āĨ¤ āĻļā§āĻ°ā§āĻ¤ā§‡āĻ‡ āĻāĻ•āĻĻāĻŽ āĻ°ā§āĻŸā§‡ āĻāĻ•āĻŸāĻŋ app.env āĻĢāĻžāĻ‡āĻ˛ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋ :

book-crud/app.env

				
					   DBUSER=root
   DBPASS=191491
   DBIP=tcp(127.0.0.1:3306)
   DBNAME=bookstore
   PORT=9030

				
			
āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž DBUSER āĻ“ DBPASS āĻĻā§āĻŦāĻžāĻ°āĻž MySQL āĻāĻ° āĻ‡āĻ‰āĻœāĻžāĻ° āĻāĻŦāĻ‚ āĻĒāĻžāĻ¸āĻ“ā§ŸāĻžāĻ°ā§āĻĄ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§‡ āĻ¨āĻŋāĻŦā§‹āĨ¤ MySQL āĻ‡āĻ¨ā§āĻ¸āĻŸāĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽāĻ­ā§‡āĻĻā§‡ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻ—āĻžāĻ‡āĻĄāĻ˛āĻžāĻ‡āĻ¨ āĻ°ā§Ÿā§‡āĻ›ā§‡āĨ¤ MySQL āĻ‡āĻ¨ā§āĻ¸āĻŸāĻ˛ āĻ•āĻ°āĻž āĻ¨āĻž āĻĨāĻžāĻ•āĻ˛ā§‡ āĻ¸ā§‡āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻāĻ‡ āĻ˛āĻŋāĻ‚āĻ•āĻŸāĻŋ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻŦā§‡āĨ¤Â 

DBIP āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°ā§‡ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ•ā§‹āĻ¨ āĻĒā§‹āĻ°ā§āĻŸā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ•āĻ°āĻŦ, DBNAME āĻšāĻšā§āĻ›ā§‡ āĻ¯ā§‡ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸āĻŸāĻž āĻ†āĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦāĨ¤ āĻ¸āĻŦāĻļā§‡āĻˇā§‡ PORT āĻšāĻšā§āĻ›ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŦā§āĻ¯āĻžāĻ•āĻāĻ¨ā§āĻĄā§‡āĻ° āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ—ā§‡āĻ° āĻĒāĻĨāĨ¤

āĻ•āĻŋāĻ›ā§ āĻŦāĻŋāĻˇā§Ÿ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ–ā§‡ā§ŸāĻžāĻ˛ā§‡ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻšāĻŦā§‡ – 

  • āĻ¯ā§‡āĻ¨ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸āĻŸāĻž āĻ†āĻ—ā§‡ āĻĨā§‡āĻ•ā§‡āĻ‡ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻĨāĻžāĻ•ā§‡āĨ¤
  • āĻŦā§āĻ¯āĻžāĻ•āĻāĻ¨ā§āĻĄ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻĒā§‹āĻ°ā§āĻŸāĻŸāĻž āĻ¯ā§‡āĻ¨ āĻ…āĻ¨ā§āĻ¯ āĻ•ā§‹āĻĨāĻžāĻ“ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻ¨āĻž āĻĨāĻžāĻ•ā§‡āĨ¤

[ā§Ž.ā§Ē.ā§¨] Viper āĻāĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ā§‡ āĻāĻ¨āĻ­āĻžā§ŸāĻ°āĻ¨āĻŽā§‡āĻ¨ā§āĻŸ āĻ—ā§āĻ˛ā§‹āĻŦāĻžāĻ˛āĻŋ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻžÂ 

āĻļā§āĻ§ā§ app.env āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻ­ā§āĻ¯āĻžāĻ˛ā§ āĻ—ā§āĻ˛ā§‹ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻ˛ā§‡āĻ‡ āĻšāĻŦā§‡āĻ¨āĻžāĨ¤ āĻ¸ā§‡āĻŸāĻžāĻ•ā§‡ āĻ¯ā§‡āĻ¨ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°ā§Ÿā§‹āĻœāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻœā§‡āĻ•ā§āĻŸā§‡āĻ° āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ āĻœāĻžā§ŸāĻ—āĻž āĻĨā§‡āĻ•ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻ¸ā§‡āĻŸāĻžāĻ° āĻŦā§āĻ¯āĻžāĻŦāĻ¸ā§āĻĨāĻžāĻ“ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻāĻ‡ āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ā§‡ āĻ†āĻŽāĻ°āĻž viper āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦāĨ¤ āĻ§āĻžāĻĒā§‡ āĻ§āĻžāĻĒā§‡ āĻāĻ‡ āĻ¸ā§‡āĻŸāĻ†āĻĒ āĻĒā§āĻ°āĻŖāĻžāĻ˛ā§€ āĻ¨āĻŋāĻšā§‡ āĻŦā§āĻ¯āĻžāĻ–ā§āĻ¯āĻž āĻ•āĻ°āĻž āĻšāĻ˛ā§‹ – 

āĻāĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻ¯āĻž āĻ•ā§‹āĻĄ āĻ•āĻ°āĻŦ āĻ¤āĻžāĻ° āĻ¸āĻŦāĻ‡ āĻšāĻŦā§‡ config/config.go āĻ¤ā§‡ : 

  1. āĻĒā§āĻ°āĻĨāĻŽā§‡āĻ‡ āĻ†āĻŽāĻ°āĻž viper āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋ āĻ¨āĻžāĻŽāĻŋā§Ÿā§‡ āĻ¨ā§‡āĻŦā§‹āĨ¤ āĻāĻœāĻ¨ā§āĻ¯ āĻŸāĻžāĻ°ā§āĻŽāĻŋāĻ¨āĻžāĻ˛ āĻĨā§‡āĻ•ā§‡ āĻ¨āĻŋāĻšā§‡āĻ° āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻŸāĻŋ āĻ°āĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡Â go get github.com/spf13/viper
  2.  āĻāĻ•āĻŸāĻŋ Struct āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡ āĻ¨ā§‡āĻŦā§‹ āĻ¯āĻž go get github.com/spf13/viper āĻ¤ā§‡ āĻ†āĻŽāĻ°āĻž āĻ¸āĻ•āĻ˛ āĻāĻ¨āĻ­āĻžāĻ‡āĻ°āĻ¨āĻĒāĻŽā§‡āĻ¨ā§āĻŸ āĻ­ā§āĻ¯āĻžāĻ°āĻŋā§Ÿā§‡āĻŦāĻ˛ āĻ—ā§āĻ˛ā§‹ āĻŽā§āĻ¯āĻžāĻĒ āĻ•āĻ°āĻŦ āĨ¤ āĻ¨āĻžāĻŽāĻ•āĻ°āĻŖā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ­ā§āĻ¯āĻžāĻ°āĻŋā§Ÿā§‡āĻŦāĻ˛āĻ—ā§āĻ˛ā§‹āĻ° āĻ¨āĻžāĻŽ āĻŦā§œ āĻšāĻžāĻ¤ā§‡āĻ° āĻ…āĻ•ā§āĻˇāĻ° āĻĻāĻŋā§Ÿā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¨āĻ‡āĻ˛ā§‡ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻœāĻžā§ŸāĻ—āĻž āĻĨā§‡āĻ•ā§‡ āĻāĻ° āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻĒāĻžāĻ“ā§ŸāĻž āĻ¯āĻžāĻŦā§‡ āĻ¨āĻž – 
				
					type Config struct {
       DBUser string `mapstructure:"DBUSER"`
       DBPass string `mapstructure:"DBPASS"`
       DBIP   string `mapstructure:"DBIP"`
       DbName string `mapstructure:"DBNAME"`
       Port   string `mapstructure:"PORT"`
   }

				
			

   3.  āĻāĻŦāĻžāĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦ InitConfig() āĻ¨āĻžāĻŽā§‡ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¯āĻžāĻŦāĻ¤ā§€ā§Ÿ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻĒā§āĻ°ā§Ÿā§‹āĻœāĻ¨ā§€ā§Ÿ āĻ­ā§āĻ¯āĻžāĻ˛ā§ āĻ—ā§āĻ˛ā§‹ Config Struct āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§‡ āĻĻāĻŋāĻŦā§‹

				
					  func InitConfig() (*Config) {

       viper.AddConfigPath(".") 
/* āĻ¯āĻĻāĻŋ āĻāĻ•āĻĻāĻŽ āĻ°ā§āĻŸā§‡ app.env āĻĢāĻžāĻ‡āĻ˛ āĻĨā§‡āĻ•ā§‡ āĻĨāĻžāĻ•ā§‡ āĻ¤āĻžāĻšāĻ˛ā§‡ āĻļā§āĻ§ā§ (.) āĻĻāĻŋā§Ÿā§‡āĻ‡ āĻāĻ° āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¨ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°āĻž āĻ¯āĻžāĻŦā§‡āĨ¤ āĻ…āĻ¨ā§āĻ¯āĻĨāĻž āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¨ āĻ…āĻ¨ā§āĻ¯āĻžā§Ÿā§€ āĻĒāĻžāĻĨ āĻĻāĻŋāĻ¤ā§‡ āĻšāĻŦā§‡ */ 
       viper.SetConfigName("app") //āĻ•āĻ¨āĻĢāĻŋāĻ— āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻ¨āĻžāĻŽ 
       viper.SetConfigType("env") //āĻ•āĻ¨āĻĢāĻŋāĻ— āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ (env,json,yaml) 
       viper.AutomaticEnv()

	 if err := viper.ReadInConfig(); err != nil {
        	log.Fatal("Error reading env file", err)
   	 }
       var config *Config
   	 if err := viper.Unmarshal(&config); err != nil {
		 //config āĻ¸ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸā§‡ āĻ¸āĻŦāĻ—ā§āĻ˛ā§‹ āĻ­ā§āĻ¯āĻžāĻ˛ā§ āĻŽā§āĻ¯āĻžāĻĒ āĻšā§Ÿā§‡ āĻ—ā§‡āĻ˛ā§‹
       	 log.Fatal("Error reading env file", err)
   	 }
   	 return config

   }

				
			

     4.  āĻāĻŦāĻžāĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦ SetConfig() āĻ¨āĻžāĻŽā§‡ āĻ¯ā§‡āĻŸāĻž āĻāĻ•āĻŦāĻžāĻ° āĻ•āĻ˛ āĻ•āĻ°āĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ—ā§āĻ˛ā§‹āĻŦāĻžāĻ˛ āĻ­ā§āĻ¯āĻžāĻ°āĻŋā§Ÿā§‡āĻŦāĻ˛ā§‡ āĻĒā§āĻ°āĻĨāĻŽā§‡āĻ‡ āĻ¸āĻŦ āĻ­ā§āĻ¯āĻžāĻ˛ā§ āĻ¨āĻŋā§Ÿā§‡ āĻ¨āĻŋāĻŦā§‹ āĻāĻŦāĻ‚ āĻĒā§āĻ°ā§Ÿā§‹āĻœāĻ¨ āĻ…āĻ¨ā§āĻ¸āĻžāĻ°ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦ āĨ¤

				
					   var LocalConfig *Config

   func SetConfig() {
       LocalConfig = InitConfig()
   }

				
			

    5.  āĻ¸āĻŦāĻļā§‡āĻˇā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•ā§‹āĻĄ āĻŸāĻž āĻ¤āĻžāĻšāĻ˛ā§‡ āĻĻāĻžāĻā§œāĻžāĻšā§āĻ›ā§‡ –  

config/config.go

				
					package config

   import (
       "log"

       "github.com/spf13/viper"
   )

   var LocalConfig *Config

   type Config struct {
       DBUser string `mapstructure:"DBUSER"`
       DBPass string `mapstructure:"DBPASS"`
       DBIP   string `mapstructure:"DBIP"`
       DbName string `mapstructure:"DBNAME"`
       Port   string `mapstructure:"PORT"`
   }

   func initConfig() *Config {
       viper.AddConfigPath(".")
       viper.SetConfigName("app")
       viper.SetConfigType("env")
       viper.AutomaticEnv()

       if err := viper.ReadInConfig(); err != nil {
           log.Fatal("Error reading env file", err)
       }
       var config *Config
       if err := viper.Unmarshal(&config); err != nil {
           log.Fatal("Error reading env file", err)
       }
       return config
   }
   
   func SetConfig() {
       LocalConfig = initConfig()
   }

				
			

[ā§Ž.ā§Ē.ā§Š] āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡āĻ° āĻŽāĻĄā§‡āĻ˛ āĻ¤ā§ˆāĻ°āĻŋ

āĻāĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻ¯ā§‡ āĻŽāĻĄā§‡āĻ˛āĻŸāĻŋ āĻŦāĻžāĻ¨āĻžāĻŦā§‹ āĻ¤āĻž models/book.go āĻ¤ā§‡ āĻĨāĻžāĻ•āĻŦā§‡ : 

  1. āĻāĻ•āĻŸāĻŋ Book āĻ¨āĻžāĻŽā§‡āĻ° Struct āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦ, āĻāĻŸāĻžāĻ‡ āĻšāĻŦā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡āĻ° āĻ¸ā§āĻ•āĻŋāĻŽāĻž – 

models/book.go

				
					package models

   type Book struct {
       ID          uint   `gorm:"primaryKey;autoIncrement"`
       BookName    string 
       Author      string 
       Publication string 
   }

				
			

        2.  āĻāĻ–āĻžāĻ¨ā§‡ ID āĻāĻ° āĻĒāĻžāĻļā§‡ gorm āĻāĻ° āĻŸā§āĻ¯āĻžāĻ— primaryKey āĻāĻŦāĻ‚ autoIncrement āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšā§Ÿā§‡āĻ›ā§‡āĨ¤ āĻāĻ—ā§āĻ˛ā§‹āĻ° āĻ•āĻžāĻœ āĻāĻĻā§‡āĻ° āĻ¨āĻžāĻŽā§‡āĻ‡ āĻĒā§āĻ°āĻ•āĻžāĻļ āĻĒāĻžāĻšā§āĻ›ā§‡āĨ¤

[ā§Ž.ā§Ē.ā§Ē] āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ•āĻžāĻ¨ā§‡āĻ•āĻļāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨Â 

āĻāĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻ¯āĻž āĻ•ā§‹āĻĄ āĻ•āĻ°āĻŦ āĻ¤āĻžāĻ° āĻ¸āĻŦāĻ‡ āĻšāĻŦā§‡ connection/connection.go āĻ¤ā§‡ : 

  1.  āĻĒā§āĻ°āĻĨāĻŽā§‡āĻ‡ gorm āĻāĻŦāĻ‚ MySQL āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°ā§Ÿā§‹āĻœāĻ¨ā§€ā§Ÿ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻ—ā§āĻ˛ā§‹ āĻ¨āĻžāĻŽāĻŋā§Ÿā§‡ āĻ¨ā§‡āĻ‡āĨ¤ āĻāĻœāĻ¨ā§āĻ¯ āĻŸāĻžāĻ°ā§āĻŽāĻŋāĻ¨āĻžāĻ˛ā§‡ āĻ¨āĻŋāĻšā§‡āĻ° āĻ•ā§‹āĻĄ āĻ—ā§āĻ˛ā§‹ āĻ°āĻžāĻ¨ āĻ•āĻ°āĻŦ –

āĻ¸āĻžāĻĨā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ†āĻ°ā§‹ ā§¨ āĻŸāĻŋ āĻ˛ā§‹āĻ•āĻžāĻ˛ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻāĻ•ā§āĻ¸āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ¸ā§‡āĻ—ā§āĻ˛ā§‹ āĻšāĻšā§āĻ›ā§‡ āĻāĻ•āĻŸā§ āĻ†āĻ—ā§‡āĻ° āĻŦāĻžāĻ¨āĻžāĻ¨ā§‹ “Go-bootcamp/pkg/config” āĻ“ “Go-bootcamp/pkg/models” āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĨ¤

      2.  āĻāĻŦāĻžāĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ *gorm.DB āĻ­ā§āĻ¯āĻžāĻ°āĻŋā§Ÿā§‡āĻŦāĻ˛ āĻāĻŦāĻ‚ Connect() āĻ¨āĻžāĻŽā§‡ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦ, āĻ¯ā§‡āĻŸāĻŋ config/config.go āĻāĻ° LocalConfig āĻāĻ° āĻĢāĻŋāĻ˛ā§āĻĄ āĻ­ā§āĻ¯āĻžāĻ˛ā§ āĻ—ā§āĻ˛ā§‹ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻ•āĻžāĻ¨ā§‡āĻ•āĻļāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻŦā§‡āĨ¤ āĻ¸āĻŦāĻļā§‡āĻˇā§‡ āĻ¤ā§ˆāĻ°āĻŋāĻ•ā§ƒāĻ¤ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸āĻŸāĻŋ *gorm.DB āĻ­ā§āĻ¯āĻžāĻ°āĻŋā§Ÿā§‡āĻŦāĻ˛āĻŸāĻŋāĻ¤ā§‡ āĻ°āĻžāĻ–āĻŦā§‡ āĻāĻŦāĻ‚ āĻāĻ‡ āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ‡ āĻ†āĻŽāĻ°āĻž āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€āĻ¤ā§‡ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ¨āĻžāĻ¨āĻžāĻ¨ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻ•āĻ°āĻŦ – 

				
					go get gorm.io/gorm

go get gorm.io/driver/mysql
				
			

āĻ¸āĻžāĻĨā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ†āĻ°ā§‹ ā§¨ āĻŸāĻŋ āĻ˛ā§‹āĻ•āĻžāĻ˛ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻāĻ•ā§āĻ¸āĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ¸ā§‡āĻ—ā§āĻ˛ā§‹ āĻšāĻšā§āĻ›ā§‡ āĻāĻ•āĻŸā§ āĻ†āĻ—ā§‡āĻ° āĻŦāĻžāĻ¨āĻžāĻ¨ā§‹ “go-bootcamp/pkg/config” āĻ“ “go-bootcamp/pkg/models” āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĨ¤

      3.   āĻāĻŦāĻžāĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ *gorm.DB āĻ­ā§āĻ¯āĻžāĻ°āĻŋā§Ÿā§‡āĻŦāĻ˛ āĻāĻŦāĻ‚ Connect() āĻ¨āĻžāĻŽā§‡ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦ, āĻ¯ā§‡āĻŸāĻŋ config/config.go āĻāĻ° LocalConfig āĻāĻ° āĻĢāĻŋāĻ˛ā§āĻĄ āĻ­ā§āĻ¯āĻžāĻ˛ā§ āĻ—ā§āĻ˛ā§‹ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻ•āĻžāĻ¨ā§‡āĻ•āĻļāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻŦā§‡āĨ¤ āĻ¸āĻŦāĻļā§‡āĻˇā§‡ āĻ¤ā§ˆāĻ°āĻŋāĻ•ā§ƒāĻ¤ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸āĻŸāĻŋ *gorm.DB āĻ­ā§āĻ¯āĻžāĻ°āĻŋā§Ÿā§‡āĻŦāĻ˛āĻŸāĻŋāĻ¤ā§‡ āĻ°āĻžāĻ–āĻŦā§‡ āĻāĻŦāĻ‚ āĻāĻ‡ āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ‡ āĻ†āĻŽāĻ°āĻž āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€āĻ¤ā§‡ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ¨āĻžāĻ¨āĻžāĻ¨ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻ•āĻ°āĻŦ – 

				
					var db *gorm.DB

func connect() {
   dbConfig := config.LocalConfig
   dsn := fmt.
       Sprintf("%s:%s@%s/%s?charset=utf8mb4&parseTime=True&loc=Local",
           dbConfig.DBUser, dbConfig.DBPass, dbConfig.DBIP, dbConfig.DbName)
   d, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
       Logger: logger.Default.LogMode(logger.Info),
   })
   if err != nil {
       fmt.Println("error connecting to DB")
       panic(err)
   }
   fmt.Println("Database Connected")
   db = d
}

				
			

     4.  āĻāĻŦāĻžāĻ°ā§‡ āĻāĻ•āĻŸāĻŋ Migrate() āĻĢāĻžāĻ‚āĻļāĻ¨ āĻŦāĻžāĻ¨āĻžāĻŦ āĻ¯āĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŽāĻĄā§‡āĻ˛ āĻ…āĻ¨ā§āĻ¯āĻžā§Ÿā§€ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻŸā§‡āĻŦāĻŋāĻ˛ āĻ¤ā§ˆāĻ°āĻŋ āĻŦāĻž āĻ†āĻĒāĻĄā§‡āĻŸ āĻšāĻŦā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻŦāĻžāĻ° āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽ āĻ°āĻžāĻ¨ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽā§ŸāĨ¤

				
					 func migrate() {
       db.Migrator().AutoMigrate(&models.Book{})
   }

				
			

      5.  āĻ¸āĻŦāĻļā§‡āĻˇā§‡ āĻāĻ•āĻŸāĻŋ GetDB() āĻĢāĻžāĻ‚āĻļāĻ¨ āĻŦāĻžāĻ¨āĻžāĻŦā§‹, āĻ¯ā§‡āĻŸāĻŋ connect() āĻ“ migrate() āĻĢāĻžāĻ‚āĻļāĻ¨ āĻšāĻžāĻ˛āĻŋā§Ÿā§‡ āĻ†āĻĒāĻĄā§‡āĻŸā§‡āĻĄ *gorm.DB āĻāĻ° āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻ•āĻ°āĻŦā§‡āĨ¤

				
					func GetDB() *gorm.DB {
       if db == nil {
           connect()
       }
       migrate()
       return db
   }

				
			

      6.  āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĢāĻžāĻ‡āĻ¨āĻžāĻ˛ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻĻāĻžāĻā§œāĻžāĻšā§āĻ›ā§‡ – 

connection/connection.go

				
					  package connection

   import (
       "fmt"
       "go-bootcamp/pkg/config"
       "go-bootcamp/pkg/models"

       "gorm.io/driver/mysql"
       "gorm.io/gorm"
       "gorm.io/gorm/logger"
   )

   var db *gorm.DB

   func connect() {
       dbConfig := config.LocalConfig

       dsn := fmt.
           Sprintf("%s:%s@%s/%s?charset=utf8mb4&parseTime=True&loc=Local",
               dbConfig.DBUser, dbConfig.DBPass, dbConfig.DBIP, dbConfig.DbName)
       d, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
           Logger: logger.Default.LogMode(logger.Info),
       })
       if err != nil {
           fmt.Println("error connecting to DB")
           panic(err)
       }

       fmt.Println("Database Connected")
       db = d
   }

   func migrate() {
       db.Migrator().AutoMigrate(&models.Book{})
   }


   func GetDB() *gorm.DB {
       if db == nil {
           connect()
       }
       migrate()
       return db
   }

				
			

ā§Ž.ā§Ē.ā§Ģ main āĻĢāĻžāĻ‚āĻļāĻ¨ āĻāĻŦāĻ‚ ECHO āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ¤ā§ˆāĻ°āĻŋ

āĻāĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻ¯āĻž āĻ•ā§‹āĻĄ āĻ•āĻ°āĻŦ āĻ¤āĻž āĻšāĻŦā§‡ main.go āĻ¤ā§‡ : 

  1. main.go āĻ¤ā§‡ main() āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ†āĻŽāĻ°āĻž echo.New() āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ•āĻ˛ āĻ•āĻ°ā§‡ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻ¸āĻš ECHO āĻĢā§āĻ°ā§‡āĻŽāĻ“ā§ŸāĻžāĻ°ā§āĻ•ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋāĨ¤ āĻ¤āĻžāĻ° āĻ†āĻ—ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° echo āĻāĻ° āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋ āĻ¨āĻžāĻŽāĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻŸāĻžāĻ°ā§āĻŽāĻŋāĻ¨āĻžāĻ˛ā§‡ āĻ¨āĻŋāĻšā§‡ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻ°āĻžāĻ¨ āĻ•āĻ°āĻŦ – go get github.com/labstack/echo/v4 āĻāĻ°āĻĒāĻ° – 
				
					func main() {
       e := echo.New()
   }

				
			

     2.  āĻāĻŦāĻžāĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ‡ echo.Echo āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻŸāĻŋ container/serve.go āĻ¤ā§‡ āĻĒāĻžāĻ āĻŋā§Ÿā§‡ āĻĻāĻŋāĻŦā§‹ āĻāĻŦāĻ‚ āĻŦāĻžāĻ•āĻŋ āĻ¸āĻŦāĻ§āĻ°āĻ¨ā§‡āĻ° āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛ā§‡āĻ° āĻ•āĻžāĻœ āĻ“āĻ–āĻžāĻ¨ā§‡āĻ‡ āĻšāĻŦā§‡āĨ¤ āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° “Go-bootcamp/pkg/containers” āĻ˛ā§‹āĻ•āĻžāĻ˛ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋ āĻ‡āĻŽāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤Â 

				
					 package main

   import (
       "Go-bootcamp/pkg/containers"

       "github.com/labstack/echo/v4"
   )

   func main() {
       e := echo.New()
       containers.Serve(e)
   }

				
			

[ā§Ž.ā§Ē.ā§Ŧ] Routes āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛ āĻāĻŦāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻšāĻžāĻ˛āĻžāĻ¨ā§‹

āĻāĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž container/serve.go āĻ¤ā§‡ āĻ•ā§‹āĻĄ āĻ•āĻ°āĻŦ : 

  1.  āĻāĻ–āĻžāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨ Serve() āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦ āĻ¯āĻž main.go āĻĨā§‡āĻ•ā§‡ āĻ†āĻ¸āĻž echo.Echo āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸āĻŸāĻŋāĻ•ā§‡ āĻ°āĻŋāĻ¸āĻŋāĻ­ āĻ•āĻ°āĻŦā§‡ āĻāĻŦāĻ‚ āĻ¤āĻž routes/book.go āĻ¤ā§‡ āĻĒāĻžāĻ āĻŋā§Ÿā§‡ āĻĻāĻŋāĻŦā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°ā§Ÿā§‹āĻœāĻ¨ā§€ā§Ÿ āĻ¸āĻ•āĻ˛ routes āĻ¤ā§ˆāĻ°āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĨ¤ āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ˛ā§‹āĻ•āĻžāĻ˛ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ “Go-bootcamp/pkg/routes” āĻ‡āĻŽāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž āĻ˛āĻžāĻ—āĻŦā§‡āĨ¤ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ “github.com/labstack/echo/v4” āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋāĻ“ āĻ‡āĻŽāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž āĻ˛āĻžāĻ—āĻŦā§‡āĨ¤
  2. āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ°āĻžāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ config/config.go āĻāĻ° LocalConfig āĻ­ā§āĻ¯āĻžāĻ°āĻŋā§Ÿā§‡āĻŦāĻ˛āĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦāĨ¤ āĻ¤āĻžāĻ° āĻ†āĻ—ā§‡ āĻ†āĻŽāĻ°āĻž SetConfig() āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻž āĻšāĻžāĻ˛āĻžāĻŦā§‹, āĻ•āĻžāĻ°āĻŖ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°ā§‹ āĻĒā§āĻ°āĻœā§‡āĻ•ā§āĻŸā§‡āĻ° āĻ¸āĻŦāĻ§āĻ°āĻ¨ā§‡āĻ° Initialization āĻāĻ° āĻ•āĻžāĻœ āĻāĻ‡ Serve() āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ•āĻ°āĻŦ āĨ¤ āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ˛ā§‹āĻ•āĻžāĻ˛ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ “Go-bootcamp/pkg/config” āĻ‡āĻŽāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž āĻ˛āĻžāĻ—āĻŦā§‡āĨ¤Â 
  3. āĻāĻ° āĻ†āĻ—ā§‡ āĻ¯ā§‡ āĻ†āĻŽāĻ°āĻž āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ LocalConfig āĻāĻ° āĻ­ā§āĻ¯āĻžāĻ˛ā§ āĻ—ā§āĻ˛ā§‹ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¸ā§‡āĻŸāĻž āĻ¸āĻŽā§āĻ­āĻŦ āĻšāĻŦā§‡ āĻ¨āĻž Serve() āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋ āĻ°āĻžāĻ¨ āĻ•āĻ°āĻž āĻŦā§āĻ¯āĻ¤āĻŋāĻ¤āĨ¤
  4. āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĢāĻžāĻ‡āĻ¨āĻžāĻ˛ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻĻāĻžāĻā§œāĻžāĻšā§āĻ›ā§‡ – 

 container/serve.go

				
					package containers

   import (
       "fmt"
       "Go-bootcamp/pkg/config"
       "Go-bootcamp/pkg/routes"
       "log"

       "github.com/labstack/echo/v4"
   )

   func Serve(e *echo.Echo) {

       config.SetConfig()
	  // config initialization
 
       routes.BookRoutes(e)


       log.Fatal(e.Start(fmt.Sprintf(":%s", config.LocalConfig.Port)))
	  // āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ¸ā§āĻŸāĻžāĻ°ā§āĻŸ
   }

				
			

āĻŦāĻŋāĻƒāĻĻā§āĻ°āĻƒ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§āĻ° āĻŽāĻ¤ā§‹ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ¤ā§ˆāĻ°āĻŋ āĻ“ āĻŽā§āĻ¯āĻžāĻ¨ā§‡āĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ°āĻž āĻ†āĻŦāĻžāĻ° container/serve.go  āĻ¤ā§‡ āĻĢā§‡āĻ°āĻ¤ āĻ†āĻ¸āĻŦāĨ¤Â 

[ā§Ž.ā§Ē.ā§­] Routes āĻ¤ā§ˆāĻ°āĻŋ

āĻāĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻ¯āĻž āĻ•ā§‹āĻĄ āĻ•āĻ°āĻŦ āĻ¤āĻž āĻšāĻŦā§‡ routes/book.go āĻ¤ā§‡ : 

  1.  āĻĒā§āĻ°āĻĨāĻŽā§‡āĻ‡ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ—ā§āĻ°ā§āĻĒ āĻ•āĻ°āĻŦ echo.Echo āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸āĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¸āĻ•āĻ˛ route, āĻāĻ‡ āĻ—ā§āĻ°ā§āĻĒā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĒā§œāĻŦā§‡āĨ¤ āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻ—ā§āĻ°ā§āĻĒā§‡āĻ° route āĻ¯āĻĻāĻŋ /bookstore āĻšā§Ÿā§‡ āĻĨāĻžāĻ•ā§‡ āĻ¤āĻžāĻšāĻ˛ā§‡ āĻāĻ‡ āĻ—ā§āĻ°ā§āĻĒā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡āĻ° /book – route āĻŸāĻŋ āĻ†āĻ¸āĻ˛ā§‡ /bookstore/book – route āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°āĻŦā§‡āĨ¤ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° “github.com/labstack/echo/v4” āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋ āĻ‡āĻŽāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž āĻ˛āĻžāĻ—āĻŦā§‡ :   
				
					

   book := e.Group("/bookstore")
				
			

      2.  āĻāĻŦāĻžāĻ°ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° route āĻ—ā§āĻ˛ā§‹ book āĻ—ā§āĻ°ā§āĻĒā§‡āĻ° āĻ¨āĻŋāĻšā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¤ā§āĻ¯ā§‡āĻ• route āĻ­āĻŋāĻ¨ā§āĻ¨ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻ°āĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ¨ā§āĻĄāĻĒā§Ÿā§‡āĻ¨ā§āĻŸ āĻšāĻŋāĻ¸ā§‡āĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻŦā§‡āĨ¤Â 

      3.  āĻĒā§āĻ°āĻ¤ā§āĻ¯ā§‡āĻ• āĻāĻ¨ā§āĻĄāĻĒā§Ÿā§‡āĻ¨ā§āĻŸ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄā§‡āĻ˛ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ•āĻ°ā§‡ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻšāĻŦā§‡, āĻ¯ā§‡āĻ—ā§āĻ˛ā§‹āĻ•ā§‡ āĻŦāĻ˛āĻž āĻšā§Ÿ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻžāĻ° āĻĢāĻžāĻ‚āĻļāĻ¨ āĻāĻŦāĻ‚ āĻāĻ‡ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛ā§‹ controllers/book.go āĻ¤ā§‡ āĻĨāĻžāĻ•āĻŦā§‡āĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚ āĻāĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° “Go-bootcamp/pkg/controllers” āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋ āĻ‡āĻŽāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻšā§āĻ›ā§‡āĨ¤

      4.  āĻĒā§āĻ°ā§‹ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻ¤āĻžāĻšāĻ˛ā§‡ āĻĻāĻžāĻā§œāĻžāĻšā§āĻ›ā§‡ – 

				
					 package routes

   import (
       "Go-bootcamp/pkg/controllers"

       "github.com/labstack/echo/v4"
   )

   func BookRoutes(e *echo.Echo) {
       book := e.Group("/bookstore")

       book.POST("/book", controllers.CreateBook)
       book.GET("/book", controllers.GetBooks)
       book.PUT("/book/:bookID", controllers.UpdateBook)
       book.DELETE("/book/:bookID", controllers.DeleteBook)
   }



				
			

  5.  āĻāĻ–āĻžāĻ¨ā§‡ POST, GET, PUT, DELETE āĻ—ā§āĻ˛ā§‹āĻ‡ āĻšāĻšā§āĻ›ā§‡ HTTP āĻ°āĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āĻŸā§‡āĻ° āĻ§āĻ°āĻŖ āĻāĻŦāĻ‚ āĻāĻ‡ āĻ…āĻ¨ā§āĻ¯āĻžā§Ÿā§€ āĻĒā§āĻ°āĻ¤ā§āĻ¯ā§‡āĻ•ā§‡āĻ° āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻžāĻ° āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ—ā§āĻ˛ā§‹ āĻ°ā§‡āĻ¸āĻĒāĻ¨ā§āĻ¸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦā§‡āĨ¤

[ā§Ž.ā§Ē.ā§Ž] āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ°ā§‡āĻ° āĻ›ā§‹āĻŸā§āĻŸ āĻŦāĻŋāĻŦāĻ°āĻŖā§€Â 

āĻ¯ā§‡āĻšā§‡āĻ¤ā§ routes/book.go āĻ controllers/book.go āĻāĻ° āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ– āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚ āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻ†āĻĒāĻžāĻ¤āĻ¤ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛ā§‹ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡ āĻ°ā§‡āĻ–ā§‡ āĻ¯āĻžāĻ‡āĨ¤ āĻ°āĻŋāĻ•ā§‹ā§Ÿā§‡āĻ¸ā§āĻŸ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄā§‡āĻ˛ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻ°ā§‡āĻ¸āĻĒāĻ¨ā§āĻ¸ā§‡āĻ° āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻ–āĻžāĻ¨āĻŋāĻ•āĻŸāĻž āĻĒāĻ°ā§‡ āĻ¯ā§‡ā§Ÿā§‡ āĻĻā§‡āĻ–āĻŦ –

				
					 package controllers

   import "github.com/labstack/echo/v4"

   func CreateBook(e echo.Context) error
   func GetBooks(e echo.Context) error
   func UpdateBook(e echo.Context) error
   func DeleteBook(e echo.Context) error

				
			

[ā§Ž.ā§Ē.ā§¯] āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄāĻŋāĻ‚

  1. āĻāĻ‡ āĻ…āĻ‚āĻļāĻŸāĻž āĻĒā§āĻ°ā§‹ āĻĒā§āĻ°āĻœā§‡āĻ•ā§āĻŸā§‡āĻ° āĻ…āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻāĻ•āĻŸāĻŋ āĻ…āĻ‚āĻļāĨ¤ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ†āĻŽāĻ°āĻž āĻĒāĻžāĻ°ā§āĻŸ ā§Š āĻĨā§‡āĻ•ā§‡āĻ‡ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤āĨ¤ āĻ¸āĻšāĻœ āĻ­āĻžāĻˇāĻžā§Ÿ, āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻšāĻ˛ā§‹ āĻ•āĻŋāĻ›ā§ āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻ¸āĻŽāĻˇā§āĻŸāĻŋāĨ¤ āĻāĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻāĻŦāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡ Create, Read, Update āĻāĻŦāĻ‚ Delete āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻŋāĻ›ā§ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ…āĻŦāĻļā§āĻ¯ āĻĒā§āĻ°ā§Ÿā§‹āĻœāĻ¨āĨ¤Â 

    āĻ…āĻ¨ā§‡āĻ• āĻ—ā§āĻ˛ā§‹ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¨āĻŋā§Ÿā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻ¤ā§‡ āĻ—ā§‡āĻ˛ā§‡ āĻ¯ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻŽā§āĻŽā§āĻ–ā§€āĻ¨ āĻšāĻ¤ā§‡ āĻšā§Ÿ āĻ¸ā§‡āĻŸāĻž āĻšāĻšā§āĻ›ā§‡ āĻ•āĻ–āĻ¨ āĻ•ā§‹āĻ¨ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¨āĻŋā§Ÿā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻ›āĻŋ āĻ¸ā§‡āĻŸāĻž āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻĨāĻžāĻ•ā§‡ āĻ¨āĻžāĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻāĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻšāĻŋāĻ¸ā§‡āĻŦā§‡ āĻ¯āĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻ¸ā§‡āĻŸāĻž āĻšāĻšā§āĻ›ā§‡, āĻāĻ‡ āĻ…āĻŦāĻļā§āĻ¯ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛ā§‹āĻ° āĻ‡āĻŽāĻĒā§āĻ˛āĻŋāĻŽā§‡āĻ¨ā§āĻŸ āĻ•āĻ°āĻžāĻŸāĻžāĻ•ā§‡ āĻ†āĻŦāĻļā§āĻ¯āĻ• āĻŦāĻžāĻ¨āĻŋā§Ÿā§‡ āĻĢā§‡āĻ˛āĻžāĨ¤ āĻ¸āĻšāĻœ āĻ­āĻžāĻˇāĻžā§Ÿ, āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻ°āĻž āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻ•ā§‹āĻ¨ā§‹ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ‡āĻŽāĻĒā§āĻ˛āĻŋāĻŽā§‡āĻ¨ā§āĻŸ āĻ¨āĻž āĻ•āĻ°āĻŋ āĻŦāĻž āĻ¸āĻ āĻŋāĻ• āĻ‰āĻĒāĻžā§Ÿā§‡ āĻ‡āĻŽāĻĒā§āĻ˛āĻŋāĻŽā§‡āĻ¨ā§āĻŸ āĻ¨āĻž āĻ•āĻ°āĻŋ, āĻ¸ā§‡āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ°āĻ°ā§‡āĻ° āĻ¸āĻŽā§āĻŽā§āĻ–ā§€āĻ¨ āĻšāĻŦā§‹āĨ¤Â 

    āĻāĻ‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻ‡āĻŽāĻĒā§āĻ˛āĻŋāĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨āĻ•ā§‡ āĻŦāĻžāĻ§ā§āĻ¯āĻŦāĻžāĻ§āĻ•āĻ¤āĻžā§Ÿ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻžāĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ‡ āĻšāĻ˛ā§‹ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄāĻŋāĻ‚ āĨ¤

    āĻĒā§āĻ°āĻĨāĻŽā§‡āĻ‡ āĻ†āĻŽāĻ°āĻž domain/book.go āĻ¤ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸āĻ—ā§āĻ˛ā§‹ āĻ˛āĻŋāĻ–ā§‡ āĻĢā§‡āĻ˛āĻŋ : 

				
					package domain

   import (
       "Go-bootcamp/pkg/models"
       "Go-bootcamp/pkg/types"
   )

   // āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸
   type IBookRepo interface {
       GetBooks(bookID uint) []models.Book
       CreateBook(book *models.Book) error
       UpdateBook(book *models.Book) error
       DeleteBook(bookID uint) error
   }

   // āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ 
   type IBookService interface {
       GetBooks(bookID uint) ([]types.BookRequest, error)
       CreateBook(book *models.Book) error
       UpdateBook(book *models.Book) error
       DeleteBook(bookID uint) error
   }

				
			
  • āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄāĻŋāĻ‚ āĻāĻ° āĻĒā§āĻ°ā§Ÿā§‹āĻ— 

āĻ¸āĻšāĻœāĻ­āĻžāĻŦā§‡ āĻŦāĻ˛āĻ˛ā§‡, āĻ•ā§‹āĻ¨ā§‹ āĻāĻ•āĻŸāĻž āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯āĻĻāĻŋ āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻšāĻŋāĻ¸ā§‡āĻŦā§‡ āĻ•ā§‹āĻ¨ā§‹ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸āĻ•ā§‡ āĻĒāĻžāĻ āĻžāĻ¨ā§‹ āĻšā§Ÿ āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ“āĻ‡ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āĻ° āĻŽā§‡āĻĨāĻĄ āĻšāĻŋāĻ¸ā§‡āĻŦā§‡ āĻ“āĻ‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻ¸āĻ•āĻ˛ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛ā§‹āĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ†āĻŦāĻļā§āĻ¯āĻ• āĻšā§Ÿā§‡ āĻ¯āĻžāĻŦā§‡āĨ¤ āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻ“āĻ‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻ•ā§‹āĻ¨ā§‹ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ‡āĻŽāĻĒā§āĻ˛āĻŋāĻŽā§‡āĻ¨ā§āĻŸ āĻ¨āĻž āĻ•āĻ°āĻ˛ā§‡ āĻŦāĻž āĻ¸āĻ āĻŋāĻ• āĻ‰āĻĒāĻžā§Ÿā§‡ āĻ‡āĻŽāĻĒā§āĻ˛āĻŋāĻŽā§‡āĻ¨ā§āĻŸ āĻ¨āĻž āĻ•āĻ°āĻ˛ā§‡, āĻāĻ°āĻ°ā§‡āĻ° āĻ¸āĻŽā§āĻŽā§āĻ–ā§€āĻ¨ āĻšāĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ§āĻžāĻĒā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ‡ āĻĒā§āĻ°ā§Ÿā§‹āĻ— āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻœā§‡āĻ•ā§āĻŸā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡āĻ“ āĻ•āĻ°āĻŦāĨ¤Â 

[ā§Ž.ā§Ē.ā§§ā§Ļ] āĻĒā§āĻ°ā§Ÿā§‹āĻœāĻ¨ā§€ā§Ÿ Struct āĻ¤ā§ˆāĻ°āĻŋ 

āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄāĻŋāĻ‚ āĻ…āĻ‚āĻļā§‡āĻ°āĻ° IBookService āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨āĻŸāĻžāĻ‡āĻĒā§‡ āĻ†āĻŽāĻ°āĻž types.BookRequest āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ°ā§‡ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›āĻŋāĨ¤ āĻ†āĻŽāĻ°āĻž models.Book āĻāĻ° āĻ…ā§āĻ¯āĻžāĻ°ā§‡ āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻ¨āĻž āĻ•āĻ°ā§‡ types.BookRequest āĻāĻ° āĻ…ā§āĻ¯āĻžāĻ°ā§‡ āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻ•āĻ°āĻžāĻ° āĻ•āĻžāĻ°āĻŖ āĻšāĻ˛ā§‹, āĻ†āĻŽāĻ°āĻž models.Book āĻāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻļā§āĻ§ā§ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ•āĻžāĻœā§‡ āĻ•āĻ°āĻŦ, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻŸāĻž āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡āĻ° āĻ¸ā§āĻ•āĻŋāĻŽāĻžāĨ¤ āĻ†āĻ° āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœā§‡ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻ°ā§‡āĻ¸āĻĒāĻ¨ā§āĻ¸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ°ā§‡ āĻĒāĻžāĻ āĻžāĻŦā§‹ āĻ¸ā§‡āĻšā§‡āĻ¤ā§ āĻ¸ā§‡āĻ‡ āĻ°ā§‡āĻ¸āĻĒāĻ¨ā§āĻ¸āĻŸāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ°āĻž āĻ†āĻ˛āĻžāĻĻāĻž Struct āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦāĨ¤Â 

āĻ¤āĻžāĻšāĻ˛ā§‡ types/structures.go āĻ¤ā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ‡ āĻ•āĻžāĻ¸ā§āĻŸāĻŽ Struct āĻ—ā§āĻ˛ā§‹ āĻ°āĻžāĻ–āĻŦ – types/structures.go 

				
					 package types

   type BookRequest struct {
       ID          uint   `json:"bookID"`
       BookName    string `json:"bookname"`
       Author      string `json:"author"`
       Publication string `json:"publication,omitempty"`
   }

				
			

āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€āĻ¤ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ†āĻ°ā§‹ āĻ•āĻžāĻ¸ā§āĻŸāĻŽ Struct āĻāĻ° āĻĒā§āĻ°ā§Ÿā§‹āĻœāĻ¨ āĻĒāĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ¸ā§‡āĻ—ā§āĻ˛ā§‹āĻ° āĻ¸āĻŦāĻ‡ āĻ†āĻŽāĻ°āĻž types/structures.go āĻ¤ā§‡ āĻ°āĻžāĻ–āĻŦāĨ¤Â 

[ā§Ž.ā§Ē.ā§§ā§§] āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛ā§‹āĻ° āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄāĻŋāĻ‚ 

domain/book.go āĻ¤ā§‡ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–āĻŋāĻ¤ IBookRepo āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŸāĻžāĻ‡ āĻšāĻ˛ā§‹ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ—ā§āĻ˛ā§‹āĻ° āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸, āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻāĻ‡ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛ā§‹ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ†āĻŽāĻ°āĻž āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ•āĻ°āĻŦāĨ¤ āĻāĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° “Go-bootcamp/pkg/domain” āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋ āĻ‡āĻŽāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž āĻ˛āĻžāĻ—āĻŦā§‡āĨ¤Â 

āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻ—ā§āĻ˛ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ *gorm.DB āĻŦāĻž āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ā§‡āĻ° āĻĒā§āĻ°ā§Ÿā§‹āĻœāĻ¨ āĻšāĻŦā§‡, āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸āĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ°ā§‡āĻ–ā§‡ āĻ†āĻŽāĻ°āĻž āĻ‰āĻĒāĻ°ā§‹āĻ•ā§āĻ¤ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸āĻŸāĻŋ āĻ‰āĻ•ā§āĻ¤ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄ āĻ•āĻ°ā§‡ āĻĻāĻŋāĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ : 

				
					 type bookRepo struct {
       db *gorm.DB
   }

   func BookDBInstance(d *gorm.DB) domain.IBookRepo {
       return &bookRepo{
           db: d,
       }
   }

				
			

āĻ‰āĻĒāĻ°ā§‹āĻ•ā§āĻ¤ āĻ•ā§‹āĻĄā§‡ āĻ•āĻŋ āĻšā§Ÿā§‡āĻ›ā§‡ āĻ¤āĻž āĻ§āĻžāĻĒā§‡ āĻ§āĻžāĻĒā§‡ āĻŦā§āĻāĻŋā§Ÿā§‡ āĻĻāĻŋāĻšā§āĻ›āĻŋ – 

  1. āĻĒā§āĻ°āĻĨāĻŽāĻ¤ āĻāĻ•āĻŸāĻŋ Struct āĻ¨ā§‡ā§ŸāĻž āĻšā§Ÿā§‡āĻ›ā§‡, bookRepo āĻ¨āĻžāĻŽā§‡, āĻ¯āĻžāĻ° āĻ­ā§‡āĻ¤āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻĢāĻŋāĻ˛ā§āĻĄ db āĻ°āĻžāĻ–āĻž āĻšā§Ÿā§‡āĻ›ā§‡ *gorm.DB āĻŸāĻžāĻ‡āĻĒāĨ¤
  2. āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ§āĻžāĻĒā§‡ BookDBInstance() āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡ āĻŦāĻžāĻ‡āĻ°ā§‡ āĻĨā§‡āĻ•ā§‡ āĻ•ā§‹āĻ¨ā§‹ *gorm.DB āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ†āĻ¸āĻžāĻ° āĻĒāĻ° āĻ¤āĻž bookRepo āĻāĻ° db āĻ¤ā§‡ āĻ°ā§‡āĻ–ā§‡ āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻŸāĻžāĻ‡āĻĒā§‡ domain/book.go āĻāĻ° IBookRepo āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸āĻŸāĻŋ āĻĻā§‡ā§ŸāĻž āĻšā§Ÿā§‡āĻ›ā§‡āĨ¤
  3. āĻāĻŸāĻž āĻ•āĻ°āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡āĻ‡ āĻ†āĻŽāĻ°āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻŦā§‹ āĻĒā§āĻ°ā§‹ āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻžā§Ÿ āĻāĻ°āĻ° āĻĻā§‡āĻ–āĻžāĻšā§āĻ›ā§‡āĨ¤ āĻ•āĻžāĻ°āĻŖ, āĻāĻ–āĻ¨ āĻāĻ‡ bookRepo āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸āĻŸāĻŋāĻ° āĻŦāĻžāĻ‡āĻ¨ā§āĻĄāĻŋāĻ‚ āĻšā§Ÿā§‡ āĻ—āĻŋā§Ÿā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛ā§‹ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸāĻŸāĻŋāĻ° āĻŽā§‡āĻĨāĻĄ āĻšāĻŋāĻ¸ā§‡āĻŦā§‡ āĻ‡āĻŽāĻĒā§āĻ˛āĻŋāĻŽā§‡āĻ¨ā§āĻŸ āĻ¨āĻž āĻ•āĻ°āĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻāĻ‡ āĻāĻ°āĻ° āĻĻā§‡āĻ–āĻžāĻ¤ā§‡ āĻĨāĻžāĻ•āĻŦā§‡āĨ¤
  4. āĻāĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛ā§‹āĻ° āĻ‡āĻŽāĻĒā§āĻ˛āĻŋāĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻŦā§‹āĨ¤ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻ‡āĻŽāĻĒā§āĻ˛āĻŋāĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨ āĻ•āĻŋāĻ›ā§āĻ•ā§āĻˇāĻŖ āĻĒāĻ°ā§‡ āĻĻā§‡āĻ–āĻž āĻ¯āĻžāĻŦā§‡ : 

repositories/book.go

				
					 package repositories

   import (
       "Go-bootcamp/pkg/domain"
       "Go-bootcamp/pkg/models"

       "gorm.io/gorm"
   )

   type bookRepo struct {
       db *gorm.DB
   }


   func BookDBInstance(d *gorm.DB) domain.IBookRepo {
       return &bookRepo{
           db: d,
       }
   }

   func (repo *bookRepo) GetBooks(bookID uint) []models.Book
   func (repo *bookRepo) CreateBook(book *models.Book) error
   func (repo *bookRepo) UpdateBook(book *models.Book) error
   func (repo *bookRepo) DeleteBook(bookID uint) error

				
			

āĻ‰āĻĒāĻ°ā§‹āĻ•ā§āĻ¤ āĻ•ā§‹āĻĄā§‡ āĻ†āĻŽāĻ°āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›āĻŋ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° ā§Ē āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ•ā§‡ bookRepo āĻāĻ° āĻŽā§‡āĻĨāĻĄ āĻšāĻŋāĻ¸ā§‡āĻŦā§‡ āĻ‡āĻŽāĻĒā§āĻ˛āĻŋāĻŽā§‡āĻ¨ā§āĻŸ āĻ•āĻ°āĻž āĻšā§Ÿā§‡āĻ›ā§‡āĨ¤ āĻāĻ›āĻžā§œāĻžāĻ“ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ models/book.go āĻāĻ° Book Struct āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ˛āĻžāĻ—āĻŦā§‡ āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚ “Go-bootcamp/pkg/models” āĻ“ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ “gorm.io/gorm” āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋ āĻ‡āĻŽāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž āĻ˛āĻžāĻ—āĻŦā§‡āĨ¤Â 

[ā§Ž.ā§Ē.ā§§ā§¨] āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛ā§‹āĻ° āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄāĻŋāĻ‚

āĻ‡āĻ¤ā§‹āĻŽāĻ§ā§āĻ¯ā§‡āĻ‡Â  āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ IBookRepo āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄ āĻ•āĻ°ā§‡ āĻĢā§‡āĻ˛ā§‡āĻ›āĻŋ āĻ†āĻŽāĻ°āĻžāĨ¤ āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚ āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ IBookService āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄ āĻ•āĻ°āĻžāĻŸāĻž āĻ•āĻ āĻŋāĻ¨ āĻ•āĻŋāĻ›ā§ āĻšāĻŦā§‡ āĻ¨āĻžāĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŦāĻžāĻ° āĻāĻ•āĻŸā§ āĻŽāĻžāĻĨāĻž āĻ–āĻžāĻŸāĻžāĻŦā§‹ āĻ†āĻŽāĻ°āĻž – 

āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ *gorm.DB āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ā§‡āĻ° āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ†āĻŽāĻ°āĻž āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄ āĻ•āĻ°ā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ āĻ•ā§‡āĻ¨āĻ¨āĻž āĻ“āĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻœ āĻ›āĻŋāĻ˛ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻ¨āĻŋā§Ÿā§‡āĨ¤ āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ āĻĨā§‡āĻ•ā§‡ āĻ†āĻŽāĻ°āĻž āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛ā§‹ āĻ•āĻ˛ āĻ•āĻ°āĻŦā§‹, āĻ¸ā§‡āĻšā§‡āĻ¤ā§ āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž IBookService āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸āĻŸāĻŋ IBookRepo āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄ āĻ•āĻ°ā§‡ āĻĻā§‡āĻŦā§‹āĨ¤ āĻāĻ¤ā§‡ āĻ•āĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ āĻĨā§‡āĻ•ā§‡ IBookRepo āĻāĻ° āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛ā§‹ āĻ•āĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŦā§‹ āĻ¯āĻž repositories/book.go āĻ āĻ†āĻ›ā§‡āĨ¤ āĻāĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° “Go-bootcamp/pkg/domain” āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋ āĻ‡āĻŽāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž āĻ˛āĻžāĻ—āĻŦā§‡āĨ¤Â 

āĻ¤āĻžāĻšāĻ˛ā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°āĻž āĻ¯āĻžāĻ• āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄāĻŋāĻ‚ : 

				
					 type BookService struct {
       repo domain.IBookRepo
   }

   func BookServiceInstance(bookRepo domain.IBookRepo) domain.IBookService {
       return &BookService{
           repo: bookRepo,
       }
   }

				
			
  1. āĻ‰āĻĒāĻ°ā§‹āĻ•ā§āĻ¤ āĻ•ā§‹āĻĄā§‡ āĻ•āĻŋ āĻšā§Ÿā§‡āĻ›ā§‡ āĻŸāĻž āĻ§āĻžāĻĒā§‡ āĻ§āĻžāĻĒā§‡ āĻŦā§āĻāĻŋā§Ÿā§‡ āĻĻāĻŋāĻšā§āĻ›āĻŋ – 
  2. āĻĒā§āĻ°āĻĨāĻŽāĻ¤ āĻāĻ•āĻŸāĻŋ Struct āĻ¨ā§‡ā§ŸāĻž āĻšā§Ÿā§‡āĻ›ā§‡, BookService āĻ¨āĻžāĻŽā§‡, āĻ¯āĻžāĻ° āĻ­ā§‡āĻ¤āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻĢāĻŋāĻ˛ā§āĻĄ repo āĻ°āĻžāĻ–āĻž āĻšā§Ÿā§‡āĻ›ā§‡ āĻ¯āĻž domain.IBookRepo āĻŸāĻžāĻ‡āĻĒāĨ¤
  3. āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ§āĻžāĻĒā§‡ BookServiceInstance() āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡ āĻŦāĻžāĻ‡āĻ°ā§‡ āĻĨā§‡āĻ•ā§‡ āĻ•ā§‹āĻ¨ā§‹ domain.IBookRepo āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ†āĻ¸āĻžāĻ° āĻĒāĻ° āĻ¤āĻž BookService āĻāĻ° repo āĻ¤ā§‡ āĻ°ā§‡āĻ–ā§‡ āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻŸāĻžāĻ‡āĻĒā§‡ domain/book.go āĻāĻ° IBookService āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸āĻŸāĻŋ āĻĻā§‡ā§ŸāĻž āĻšā§Ÿā§‡āĻ›ā§‡āĨ¤
  4. āĻāĻŸāĻž āĻ•āĻ°āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡āĻ‡ āĻ†āĻŽāĻ°āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻŦā§‹ āĻĒā§āĻ°ā§‹ āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻžā§Ÿ āĻāĻ°āĻ° āĻĻā§‡āĻ–āĻžāĻšā§āĻ›ā§‡āĨ¤ āĻ•āĻžāĻ°āĻŖ, āĻāĻ–āĻ¨ āĻāĻ‡ BookService āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸āĻŸāĻŋāĻ° āĻŦāĻžāĻ‡āĻ¨ā§āĻĄāĻŋāĻ‚ āĻšā§Ÿā§‡ āĻ—āĻŋā§Ÿā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛ā§‹ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸāĻŸāĻŋāĻ° āĻŽā§‡āĻĨāĻĄ āĻšāĻŋāĻ¸ā§‡āĻŦā§‡ āĻ‡āĻŽāĻĒā§āĻ˛āĻŋāĻŽā§‡āĻ¨ā§āĻŸ āĻ¨āĻž āĻ•āĻ°āĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻāĻ‡ āĻāĻ°āĻ° āĻĻā§‡āĻ–āĻžāĻ¤ā§‡ āĻĨāĻžāĻ•āĻŦā§‡āĨ¤
  5. āĻāĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛ā§‹āĻ° āĻ‡āĻŽāĻĒā§āĻ˛āĻŋāĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻŦā§‹āĨ¤ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻ‡āĻŽāĻĒā§āĻ˛āĻŋāĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨ āĻ•āĻŋāĻ›ā§āĻ•ā§āĻˇāĻŖ āĻĒāĻ°ā§‡ āĻĻā§‡āĻ–āĻž āĻ¯āĻžāĻŦā§‡ : 

service/book.go

				
					 package services

   import (
       "Go-bootcamp/pkg/domain"
       "Go-bootcamp/pkg/models"
       "Go-bootcamp/pkg/types"
   )

   type BookService struct {
       repo domain.IBookRepo
   }

   func BookServiceInstance(bookRepo domain.IBookRepo) domain.IBookService {
       return &BookService{
           repo: bookRepo,
       }
   }


   func (service *BookService) GetBooks(bookID uint) ([]types.BookRequest, error)
   func (service *BookService) CreateBook(book *models.Book) error
   func (service *BookService) UpdateBook(book *models.Book) error
   func (service *BookService) DeleteBook(bookID uint) error

				
			

āĻ‰āĻĒāĻ°ā§‹āĻ•ā§āĻ¤ āĻ•ā§‹āĻĄā§‡ āĻ†āĻŽāĻ°āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›āĻŋ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° ā§Ē āĻŸāĻŋ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ•ā§‡ BookService āĻāĻ° āĻŽā§‡āĻĨāĻĄ āĻšāĻŋāĻ¸ā§‡āĻŦā§‡ āĻ‡āĻŽāĻĒā§āĻ˛āĻŋāĻŽā§‡āĻ¨ā§āĻŸ āĻ•āĻ°āĻž āĻšā§Ÿā§‡āĻ›ā§‡āĨ¤ āĻāĻ›āĻžā§œāĻžāĻ“ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ°ā§‡āĻ¸āĻĒāĻ¨ā§āĻ¸ā§‡āĻ° āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ types/structures.go āĻāĻ° BookRequest Struct āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ˛āĻžāĻ—āĻŦā§‡ āĻāĻŦāĻ‚ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛ā§‹āĻ¤ā§‡ āĻĒāĻžāĻ¸ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ models/book.go āĻāĻ° Book Struct āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ˛āĻžāĻ—āĻŦā§‡ āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚ “Go-bootcamp/pkg/types” āĻ“ “Go-bootcamp/pkg/models” āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻ‡āĻŽāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž āĻ˛āĻžāĻ—āĻŦā§‡āĨ¤Â 

[ā§Ž.ā§Ē.ā§§ā§Š] āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ°ā§‡ āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸

āĻ†āĻ—ā§‡āĻ° āĻ…āĻ‚āĻļā§‡āĻ° āĻ†āĻŽāĻ°āĻž āĻĻā§‡āĻ–ā§‡āĻ›āĻŋ, IBookRepo āĻāĻ° āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡ āĻ¨āĻŋā§Ÿā§‡ āĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§‡ IBookService āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸āĻŸāĻŋ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄ āĻ•āĻ°āĻž āĻšā§Ÿā§‡āĻ›ā§‡āĨ¤ āĻāĻ¤ā§‡ āĻ•āĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€āĻ¤ā§‡ āĻ•ā§‹āĻĄ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽā§Ÿ āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ āĻĨā§‡āĻ•ā§‡ IBookRepo āĻāĻ° āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛ā§‹ āĻ•āĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŦā§‹ āĻ¯āĻž repositories/book.go āĻ āĻ†āĻ›ā§‡āĨ¤ āĻāĻ•āĻ‡āĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻ“ āĻāĻ•āĻŸāĻŋ āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛āĻžāĻ°ā§‡ āĻĒā§āĻ°ā§Ÿā§‹āĻœāĻ¨, āĻ¯āĻžāĻ¤ā§‡ controllers/book.go āĻĨā§‡āĻ•ā§‡ āĻ†āĻŽāĻ°āĻž āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡āĻ° āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛ā§‹āĻ•ā§‡ āĻ•āĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋāĨ¤ āĻāĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° “Go-bootcamp/pkg/domain” āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋ āĻ‡āĻŽāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻž āĻ˛āĻžāĻ—āĻŦā§‡ : 

controller/book.go

				
					

   var BookService domain.IBookService


   func SetBookService(bService domain.IBookService) {
       BookService = bService
   }

				
			

āĻāĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡āĻ° āĻ¸āĻ•āĻ˛ āĻĢāĻžāĻ‚āĻļāĻ¨ BookService āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ•āĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŦ āĨ¤

[ā§Ž.ā§Ē.ā§§ā§Ē] āĻĢā§‡āĻ°āĻ¤ āĻ¯āĻžāĻ‡ container āĻ

  • āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻŸā§‡āĻŦāĻŋāĻ˛ āĻ¤ā§ˆāĻ°āĻŋāĻ° āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ connection/connection.go āĻ¤ā§‡ āĻĨāĻžāĻ•āĻ˛ā§‡āĻ“ āĻ†āĻŽāĻ°āĻž āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ•ā§‹āĻĨāĻžāĻ“ āĻĨā§‡āĻ•ā§‡ āĻ¤āĻž āĻ•āĻ˛ āĻ•āĻ°āĻŋāĻ¨āĻŋ āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ•ā§‹āĻ¨ āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋāĻ¨āĻŋāĨ¤ āĻ•āĻžāĻ°āĻŖ, āĻ¯āĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž connection/connection.go āĻāĻ° āĻ•āĻžāĻœ āĻļā§‡āĻˇ āĻ•āĻ°ā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ āĻ¤āĻ–āĻ¨ā§‹ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻšā§āĻ›āĻŋāĻ˛ āĻ¨āĻž āĻ•ā§‹āĻĨāĻžāĻ“āĨ¤ āĻ†āĻŽāĻ°āĻž āĻœāĻžāĻ¨āĻŋ, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ¨āĻž āĻ•āĻ°ā§‡ āĻ•ā§‹āĻ¨ā§‹ āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻĢā§‡āĻ˛ā§‡ āĻ°āĻžāĻ–āĻž āĻ¯āĻžā§ŸāĻ¨āĻž Go āĻ¤ā§‡āĨ¤Â Â Â Â 

āĻ†āĻ—ā§‡āĻ‡ āĻŦāĻ˛ā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ āĻ†āĻŽāĻ°āĻž āĻĢāĻŋāĻ°ā§‡ āĻ†āĻ¸āĻŦ containers/serve.go āĻ¤ā§‡ : 

  1.  āĻ¯āĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž *gorm.DB āĻāĻ° āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ repositories/book.go āĻ IBookRepo āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄ āĻ•āĻ°ā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ BookDBInstance() āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻĻā§āĻŦāĻžāĻ°āĻž, āĻ¤āĻ–āĻ¨ āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ *gorm.DB āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ°āĻŋāĻ¸āĻŋāĻ­ āĻ•āĻ°ā§‡āĻ›āĻŋāĻ˛āĻžāĻŽāĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¸ā§‡āĻŸāĻž āĻ•ā§‹āĻĨāĻž āĻĨā§‡āĻ•ā§‡ āĻ†āĻ¸āĻ›āĻŋāĻ˛ā§‹ āĻ¤āĻž āĻœāĻžāĻ¨āĻž āĻ›āĻŋāĻ˛ āĻ¨āĻžāĨ¤
  2. āĻāĻ‡ āĻŽā§āĻšā§‚āĻ°ā§āĻ¤ā§‡ Serve() āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž *gorm.DB āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦā§‹ (āĻ¯āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° “Go-bootcamp/pkg/connection” āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋ āĻ‡āĻŽāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡) āĻāĻŦāĻ‚ āĻ¸ā§‡āĻŸāĻž repositories/book.go āĻāĻ° BookDBInstance() āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡ āĻĒāĻžāĻ āĻžāĻŦā§‹ āĨ¤ āĻāĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° “Go-bootcamp/pkg/repositories” āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋ āĻ‡āĻŽāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ – 
				
					 db := connection.GetDB()

   bookRepo := repositories.BookDBInstance(db)

				
			

repositories/book.go āĻ¤ā§‡ *gorm.DB āĻāĻ° āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻĒāĻžāĻ āĻžāĻ¨ā§‹āĻ° āĻ•āĻžāĻœ āĻļā§‡āĻˇāĨ¤ āĻ†āĻŽāĻ°āĻž āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻšāĻŋāĻ¸ā§‡āĻŦā§‡ IBookRepo āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄ āĻ•āĻ°āĻž āĻ…āĻŦāĻ¸ā§āĻĨāĻžā§Ÿ āĻĒā§‡ā§Ÿā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ āĻ¸ā§‡āĻŸāĻž bookRepo āĻ¤ā§‡ āĻ¸ā§āĻŸā§‹āĻ° āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤

 āĻāĻŦāĻžāĻ° āĻ†āĻ¸āĻŋ āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡āĨ¤ services/book.go āĻ¤ā§‡ āĻ†āĻŽāĻ°āĻž BookServiceInstance() āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ IBookRepo āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ā§‡āĻ° āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ°āĻŋāĻ¸āĻŋāĻ­ āĻ•āĻ°ā§‡āĻ›āĻŋāĻ˛āĻžāĻŽāĨ¤ āĻāĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻ†āĻ—ā§‡āĻ° āĻ˛āĻžāĻ‡āĻ¨ā§‡ āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻĒāĻžāĻ“ā§ŸāĻž IBookRepo āĻāĻ° āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ bookRepo āĻ•ā§‡ services.BookServiceInstance() āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡ āĻĒāĻžāĻ¸ āĻ•āĻ°ā§‡ āĻĻā§‡āĻŦā§‹āĨ¤ āĻāĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° “Go-bootcamp/pkg/services” āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋ āĻ‡āĻŽāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻ¨āĻŋāĻšā§‡āĻ° āĻ•ā§‹āĻĄāĻŸāĻŋ āĻĻā§‡āĻ–āĻ˛ā§‡ āĻ†āĻ°ā§‡āĻ•āĻŸā§ āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻšāĻŦā§‡ āĻŦā§āĻ¯āĻžāĻĒāĻžāĻ°āĻŸāĻž –

				
					 bookRepo := repositories.BookDBInstance(db)

   bookService := services.BookServiceInstance(bookRepo)



				
			

      3.  āĻ¸āĻŦāĻļā§‡āĻˇā§‡, Serve() āĻ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ IBookService āĻāĻ° āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ bookService āĻ•ā§‡Â  controllers/book.go āĻāĻ° SetBookService() āĻ¤ā§‡ āĻĒāĻžāĻ āĻŋā§Ÿā§‡ āĻĻā§‡āĻŦā§‹ āĻ¯ā§‡āĻŸāĻž āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡āĻ° āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻŦāĻžāĻ‡āĻ¨ā§āĻĄāĻŋāĻ‚ āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻ‡āĻ¨ā§āĻ¸āĻŸā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ°āĻŋāĻ¸āĻŋāĻ­ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ°ā§‡āĻ–ā§‡āĻ›āĻŋāĻ˛āĻžāĻŽāĨ¤ āĻāĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ° “Go-bootcamp/pkg/controllers” āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻŸāĻŋ āĻ‡āĻŽāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ – 

				
					   bookRepo := repositories.BookDBInstance(db)

   bookService := services.BookServiceInstance(bookRepo)

   controllers.SetBookService(bookService)
				
			

     4.  āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĢāĻžāĻ‡āĻ¨āĻžāĻ˛ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻĻāĻžāĻā§œāĻžāĻšā§āĻ›ā§‡ :

containers/server.go

				
					 package containers


   import (
       "fmt"
       "Go-bootcamp/pkg/config"
       "Go-bootcamp/pkg/connection"
       "Go-bootcamp/pkg/controllers"
       "Go-bootcamp/pkg/repositories"
       "Go-bootcamp/pkg/routes"
       "Go-bootcamp/pkg/services"
       "log"


       "github.com/labstack/echo/v4"
   )


   func Serve(e *echo.Echo) {


       config.SetConfig()

       db := connection.GetDB()

       bookRepo := repositories.BookDBInstance(db)

       bookService := services.BookServiceInstance(bookRepo)

       controllers.SetBookService(bookService)

       routes.BookRoutes(e)

       log.Fatal(e.Start(fmt.Sprintf(":%s", config.LocalConfig.Port)))
   }

				
			

    5.  āĻāĻ–āĻžāĻ¨ā§‡āĻ‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° container/serve.go āĻāĻ° āĻ•āĻžāĻœ āĻļā§‡āĻˇāĨ¤ āĻ†āĻŽāĻ°āĻž āĻ†āĻ° āĻĢā§‡āĻ°āĻ¤ āĻ†āĻ¸āĻŦ āĻ¨āĻž āĻāĻ‡ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœā§‡, āĻ•āĻĨāĻž āĻĻāĻŋāĻšā§āĻ›āĻŋ…Â