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 āĻāϰ āĻ•āĻžāϜ āĻļ⧇āώāĨ¤ āφāĻŽāϰāĻž āφāϰ āĻĢ⧇āϰāϤ āφāϏāĻŦ āύāĻž āĻāχ āĻĒā§āϝāĻžāϕ⧇āĻœā§‡, āĻ•āĻĨāĻž āĻĻāĻŋāĻšā§āĻ›āĻŋ…Â