[ā§Ž.ā§Ē] āĻĒā§āĻ°āĻā§āĻā§āĻ āĻ¤ā§āĻ°āĻŋāĻ° āĻ°ā§āĻĄāĻŽā§āĻ¯āĻžāĻĒ āĻāĻŦāĻ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ (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
DBIP āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°ā§ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§āĻ° āĻā§āĻ¨ āĻĒā§āĻ°ā§āĻā§ āĻ¯ā§āĻāĻžāĻ¯ā§āĻ āĻāĻ°āĻŦ, DBNAME āĻšāĻā§āĻā§ āĻ¯ā§ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸āĻāĻž āĻāĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦāĨ¤ āĻ¸āĻŦāĻļā§āĻˇā§ PORT āĻšāĻā§āĻā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻŦā§āĻ¯āĻžāĻāĻāĻ¨ā§āĻĄā§āĻ° āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¯ā§āĻāĻžāĻ¯ā§āĻā§āĻ° āĻĒāĻĨāĨ¤
āĻāĻŋāĻā§ āĻŦāĻŋāĻˇā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§ā§āĻžāĻ˛ā§ āĻĨāĻžāĻāĻ¤ā§ āĻšāĻŦā§ –Â
- āĻ¯ā§āĻ¨ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸āĻāĻž āĻāĻā§ āĻĨā§āĻā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻĨāĻžāĻā§āĨ¤
- āĻŦā§āĻ¯āĻžāĻāĻāĻ¨ā§āĻĄ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻĒā§āĻ°ā§āĻāĻāĻž āĻ¯ā§āĻ¨ āĻ āĻ¨ā§āĻ¯ āĻā§āĻĨāĻžāĻ āĻŦā§āĻ¯āĻŦāĻšā§āĻ¤ āĻ¨āĻž āĻĨāĻžāĻā§āĨ¤
[ā§Ž.ā§Ē.ā§¨] Viper āĻāĻ° āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ā§ āĻāĻ¨āĻāĻžā§āĻ°āĻ¨āĻŽā§āĻ¨ā§āĻ āĻā§āĻ˛ā§āĻŦāĻžāĻ˛āĻŋ āĻ¸ā§āĻ āĻāĻ°āĻžÂ
āĻļā§āĻ§ā§ app.env āĻĢāĻžāĻāĻ˛ā§ āĻā§āĻ¯āĻžāĻ˛ā§ āĻā§āĻ˛ā§ āĻ¸ā§āĻ āĻāĻ°āĻ˛ā§āĻ āĻšāĻŦā§āĻ¨āĻžāĨ¤ āĻ¸ā§āĻāĻžāĻā§ āĻ¯ā§āĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°ā§ā§āĻāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻā§āĻā§āĻā§āĻ° āĻ¯ā§āĻā§āĻ¨ā§ āĻāĻžā§āĻāĻž āĻĨā§āĻā§ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¸ā§āĻāĻžāĻ° āĻŦā§āĻ¯āĻžāĻŦāĻ¸ā§āĻĨāĻžāĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻ āĻāĻĻā§āĻĻā§āĻļā§āĻ¯ā§ āĻāĻŽāĻ°āĻž viper āĻĒā§āĻ¯āĻžāĻā§āĻāĻāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦāĨ¤ āĻ§āĻžāĻĒā§ āĻ§āĻžāĻĒā§ āĻāĻ āĻ¸ā§āĻāĻāĻĒ āĻĒā§āĻ°āĻŖāĻžāĻ˛ā§ āĻ¨āĻŋāĻā§ āĻŦā§āĻ¯āĻžāĻā§āĻ¯āĻž āĻāĻ°āĻž āĻšāĻ˛ā§ –Â
āĻāĻāĻ¨ āĻāĻŽāĻ°āĻž āĻ¯āĻž āĻā§āĻĄ āĻāĻ°āĻŦ āĻ¤āĻžāĻ° āĻ¸āĻŦāĻ āĻšāĻŦā§ config/config.go āĻ¤ā§ :Â
- āĻĒā§āĻ°āĻĨāĻŽā§āĻ āĻāĻŽāĻ°āĻž viper āĻĒā§āĻ¯āĻžāĻā§āĻāĻāĻŋ āĻ¨āĻžāĻŽāĻŋā§ā§ āĻ¨ā§āĻŦā§āĨ¤ āĻāĻāĻ¨ā§āĻ¯ āĻāĻžāĻ°ā§āĻŽāĻŋāĻ¨āĻžāĻ˛ āĻĨā§āĻā§ āĻ¨āĻŋāĻā§āĻ° āĻāĻŽāĻžāĻ¨ā§āĻĄāĻāĻŋ āĻ°āĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§Â go get github.com/spf13/viper
- Â āĻāĻāĻāĻŋ 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 āĻ¤ā§ āĻĨāĻžāĻāĻŦā§ :Â
- āĻāĻāĻāĻŋ 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 āĻ¤ā§ :Â
- Â āĻĒā§āĻ°āĻĨāĻŽā§āĻ 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 āĻ¤ā§ :Â
- 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 āĻ¤ā§ āĻā§āĻĄ āĻāĻ°āĻŦ :Â
- Â āĻāĻāĻžāĻ¨ā§ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ Serve() āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŦ āĻ¯āĻž main.go āĻĨā§āĻā§ āĻāĻ¸āĻž echo.Echo āĻāĻ¨ā§āĻ¸āĻā§āĻ¯āĻžāĻ¨ā§āĻ¸āĻāĻŋāĻā§ āĻ°āĻŋāĻ¸āĻŋāĻ āĻāĻ°āĻŦā§ āĻāĻŦāĻ āĻ¤āĻž routes/book.go āĻ¤ā§ āĻĒāĻžāĻ āĻŋā§ā§ āĻĻāĻŋāĻŦā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°ā§ā§āĻāĻ¨ā§ā§ āĻ¸āĻāĻ˛ routes āĻ¤ā§āĻ°āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĨ¤ āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻĻā§āĻ° āĻ˛ā§āĻāĻžāĻ˛ āĻĒā§āĻ¯āĻžāĻā§āĻ “Go-bootcamp/pkg/routes” āĻāĻŽāĻĒā§āĻ°ā§āĻ āĻāĻ°āĻž āĻ˛āĻžāĻāĻŦā§āĨ¤ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ “github.com/labstack/echo/v4” āĻĒā§āĻ¯āĻžāĻā§āĻāĻāĻŋāĻ āĻāĻŽāĻĒā§āĻ°ā§āĻ āĻāĻ°āĻž āĻ˛āĻžāĻāĻŦā§āĨ¤
- āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ° āĻ°āĻžāĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ config/config.go āĻāĻ° LocalConfig āĻā§āĻ¯āĻžāĻ°āĻŋā§ā§āĻŦāĻ˛āĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦāĨ¤ āĻ¤āĻžāĻ° āĻāĻā§ āĻāĻŽāĻ°āĻž SetConfig() āĻĢāĻžāĻāĻļāĻ¨āĻāĻž āĻāĻžāĻ˛āĻžāĻŦā§, āĻāĻžāĻ°āĻŖ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°ā§ āĻĒā§āĻ°āĻā§āĻā§āĻā§āĻ° āĻ¸āĻŦāĻ§āĻ°āĻ¨ā§āĻ° Initialization āĻāĻ° āĻāĻžāĻ āĻāĻ Serve() āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻ°āĻŦ āĨ¤ āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻĻā§āĻ° āĻ˛ā§āĻāĻžāĻ˛ āĻĒā§āĻ¯āĻžāĻā§āĻ “Go-bootcamp/pkg/config” āĻāĻŽāĻĒā§āĻ°ā§āĻ āĻāĻ°āĻž āĻ˛āĻžāĻāĻŦā§āĨ¤Â
- āĻāĻ° āĻāĻā§ āĻ¯ā§ āĻāĻŽāĻ°āĻž āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§āĻ° āĻ¸āĻāĻ¯ā§āĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ LocalConfig āĻāĻ° āĻā§āĻ¯āĻžāĻ˛ā§ āĻā§āĻ˛ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĻāĻŋ āĻ¸ā§āĻāĻž āĻ¸āĻŽā§āĻāĻŦ āĻšāĻŦā§ āĻ¨āĻž Serve() āĻĢāĻžāĻāĻļāĻ¨āĻāĻŋ āĻ°āĻžāĻ¨ āĻāĻ°āĻž āĻŦā§āĻ¯āĻ¤āĻŋāĻ¤āĨ¤
- āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĢāĻžāĻāĻ¨āĻžāĻ˛ āĻā§āĻĄāĻāĻŋ āĻĻāĻžāĻā§āĻžāĻā§āĻā§ –Â
 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 āĻ¤ā§ :Â
- Â āĻĒā§āĻ°āĻĨāĻŽā§āĻ āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻā§āĻ°ā§āĻĒ āĻāĻ°āĻŦ 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
[ā§Ž.ā§Ē.ā§¯] āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻŦāĻžāĻāĻ¨ā§āĻĄāĻŋāĻ
āĻāĻ āĻ āĻāĻļāĻāĻž āĻĒā§āĻ°ā§ āĻĒā§āĻ°āĻā§āĻā§āĻā§āĻ° āĻ āĻ¤ā§āĻ¯āĻ¨ā§āĻ¤ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻāĻāĻāĻŋ āĻ āĻāĻļāĨ¤ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻŽāĻ°āĻž āĻĒāĻžāĻ°ā§āĻ ā§Š āĻĨā§āĻā§āĻ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤āĨ¤ āĻ¸āĻšāĻ āĻāĻžāĻˇāĻžā§, āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻšāĻ˛ā§ āĻāĻŋāĻā§ āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻ¸āĻŽāĻˇā§āĻāĻŋāĨ¤ āĻāĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻāĻŦāĻ āĻ¸āĻžāĻ°ā§āĻāĻŋāĻ¸ā§ 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,
}
}
āĻāĻĒāĻ°ā§āĻā§āĻ¤ āĻā§āĻĄā§ āĻāĻŋ āĻšā§ā§āĻā§ āĻ¤āĻž āĻ§āĻžāĻĒā§ āĻ§āĻžāĻĒā§ āĻŦā§āĻāĻŋā§ā§ āĻĻāĻŋāĻā§āĻāĻŋ –Â
- āĻĒā§āĻ°āĻĨāĻŽāĻ¤ āĻāĻāĻāĻŋ Struct āĻ¨ā§ā§āĻž āĻšā§ā§āĻā§, bookRepo āĻ¨āĻžāĻŽā§, āĻ¯āĻžāĻ° āĻā§āĻ¤āĻ°ā§ āĻāĻāĻāĻŋ āĻĢāĻŋāĻ˛ā§āĻĄ db āĻ°āĻžāĻāĻž āĻšā§ā§āĻā§ *gorm.DB āĻāĻžāĻāĻĒāĨ¤
- āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻ§āĻžāĻĒā§ BookDBInstance() āĻĢāĻžāĻāĻļāĻ¨ā§ āĻŦāĻžāĻāĻ°ā§ āĻĨā§āĻā§ āĻā§āĻ¨ā§ *gorm.DB āĻāĻ¨ā§āĻ¸āĻā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻāĻ¸āĻžāĻ° āĻĒāĻ° āĻ¤āĻž bookRepo āĻāĻ° db āĻ¤ā§ āĻ°ā§āĻā§ āĻ°āĻŋāĻāĻžāĻ°ā§āĻ¨ āĻāĻžāĻāĻĒā§ domain/book.go āĻāĻ° IBookRepo āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸āĻāĻŋ āĻĻā§ā§āĻž āĻšā§ā§āĻā§āĨ¤
- āĻāĻāĻž āĻāĻ°āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻĨā§āĻ āĻāĻŽāĻ°āĻž āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦā§ āĻĒā§āĻ°ā§ āĻĢāĻžāĻāĻļāĻ¨āĻāĻžā§ āĻāĻ°āĻ° āĻĻā§āĻāĻžāĻā§āĻā§āĨ¤ āĻāĻžāĻ°āĻŖ, āĻāĻāĻ¨ āĻāĻ bookRepo āĻ āĻŦāĻā§āĻā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸āĻāĻŋāĻ° āĻŦāĻžāĻāĻ¨ā§āĻĄāĻŋāĻ āĻšā§ā§ āĻāĻŋā§ā§āĻā§ āĻāĻŦāĻ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§āĻ° āĻĢāĻžāĻāĻļāĻ¨āĻā§āĻ˛ā§ āĻ āĻŦāĻā§āĻā§āĻāĻāĻŋāĻ° āĻŽā§āĻĨāĻĄ āĻšāĻŋāĻ¸ā§āĻŦā§ āĻāĻŽāĻĒā§āĻ˛āĻŋāĻŽā§āĻ¨ā§āĻ āĻ¨āĻž āĻāĻ°āĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻāĻ āĻāĻ°āĻ° āĻĻā§āĻāĻžāĻ¤ā§ āĻĨāĻžāĻāĻŦā§āĨ¤
- āĻāĻāĻ¨ āĻāĻŽāĻ°āĻž āĻĢāĻžāĻāĻļāĻ¨āĻā§āĻ˛ā§āĻ° āĻāĻŽāĻĒā§āĻ˛āĻŋāĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦā§āĨ¤ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻāĻŽāĻĒā§āĻ˛āĻŋāĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ āĻāĻŋāĻā§āĻā§āĻˇāĻŖ āĻĒāĻ°ā§ āĻĻā§āĻāĻž āĻ¯āĻžāĻŦā§ :Â
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,
}
}
- āĻāĻĒāĻ°ā§āĻā§āĻ¤ āĻā§āĻĄā§ āĻāĻŋ āĻšā§ā§āĻā§ āĻāĻž āĻ§āĻžāĻĒā§ āĻ§āĻžāĻĒā§ āĻŦā§āĻāĻŋā§ā§ āĻĻāĻŋāĻā§āĻāĻŋ –Â
- āĻĒā§āĻ°āĻĨāĻŽāĻ¤ āĻāĻāĻāĻŋ Struct āĻ¨ā§ā§āĻž āĻšā§ā§āĻā§, BookService āĻ¨āĻžāĻŽā§, āĻ¯āĻžāĻ° āĻā§āĻ¤āĻ°ā§ āĻāĻāĻāĻŋ āĻĢāĻŋāĻ˛ā§āĻĄ repo āĻ°āĻžāĻāĻž āĻšā§ā§āĻā§ āĻ¯āĻž domain.IBookRepo āĻāĻžāĻāĻĒāĨ¤
- āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻ§āĻžāĻĒā§ BookServiceInstance() āĻĢāĻžāĻāĻļāĻ¨ā§ āĻŦāĻžāĻāĻ°ā§ āĻĨā§āĻā§ āĻā§āĻ¨ā§ domain.IBookRepo āĻāĻ¨ā§āĻ¸āĻā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻāĻ¸āĻžāĻ° āĻĒāĻ° āĻ¤āĻž BookService āĻāĻ° repo āĻ¤ā§ āĻ°ā§āĻā§ āĻ°āĻŋāĻāĻžāĻ°ā§āĻ¨ āĻāĻžāĻāĻĒā§ domain/book.go āĻāĻ° IBookService āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸āĻāĻŋ āĻĻā§ā§āĻž āĻšā§ā§āĻā§āĨ¤
- āĻāĻāĻž āĻāĻ°āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻĨā§āĻ āĻāĻŽāĻ°āĻž āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦā§ āĻĒā§āĻ°ā§ āĻĢāĻžāĻāĻļāĻ¨āĻāĻžā§ āĻāĻ°āĻ° āĻĻā§āĻāĻžāĻā§āĻā§āĨ¤ āĻāĻžāĻ°āĻŖ, āĻāĻāĻ¨ āĻāĻ BookService āĻ āĻŦāĻā§āĻā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸āĻāĻŋāĻ° āĻŦāĻžāĻāĻ¨ā§āĻĄāĻŋāĻ āĻšā§ā§ āĻāĻŋā§ā§āĻā§ āĻāĻŦāĻ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§āĻ° āĻĢāĻžāĻāĻļāĻ¨āĻā§āĻ˛ā§ āĻ āĻŦāĻā§āĻā§āĻāĻāĻŋāĻ° āĻŽā§āĻĨāĻĄ āĻšāĻŋāĻ¸ā§āĻŦā§ āĻāĻŽāĻĒā§āĻ˛āĻŋāĻŽā§āĻ¨ā§āĻ āĻ¨āĻž āĻāĻ°āĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻāĻ āĻāĻ°āĻ° āĻĻā§āĻāĻžāĻ¤ā§ āĻĨāĻžāĻāĻŦā§āĨ¤
- āĻāĻāĻ¨ āĻāĻŽāĻ°āĻž āĻĢāĻžāĻāĻļāĻ¨āĻā§āĻ˛ā§āĻ° āĻāĻŽāĻĒā§āĻ˛āĻŋāĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦā§āĨ¤ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻāĻŽāĻĒā§āĻ˛āĻŋāĻŽā§āĻ¨ā§āĻā§āĻļāĻ¨ āĻāĻŋāĻā§āĻā§āĻˇāĻŖ āĻĒāĻ°ā§ āĻĻā§āĻāĻž āĻ¯āĻžāĻŦā§ :Â
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 āĻ¤ā§ :Â
- Â āĻ¯āĻāĻ¨ āĻāĻŽāĻ°āĻž *gorm.DB āĻāĻ° āĻāĻ¨ā§āĻ¸āĻā§āĻ¯āĻžāĻ¨ā§āĻ¸ā§āĻ° āĻ¸āĻžāĻĨā§ repositories/book.go āĻ IBookRepo āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ āĻŦāĻžāĻāĻ¨ā§āĻĄ āĻāĻ°ā§āĻāĻŋāĻ˛āĻžāĻŽ BookDBInstance() āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻĻā§āĻŦāĻžāĻ°āĻž, āĻ¤āĻāĻ¨ āĻ¸ā§āĻāĻžāĻ¨ā§ *gorm.DB āĻāĻ° āĻāĻāĻāĻŋ āĻāĻ¨ā§āĻ¸āĻā§āĻ¯āĻžāĻ¨ā§āĻ¸ āĻ°āĻŋāĻ¸āĻŋāĻ āĻāĻ°ā§āĻāĻŋāĻ˛āĻžāĻŽāĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¸ā§āĻāĻž āĻā§āĻĨāĻž āĻĨā§āĻā§ āĻāĻ¸āĻāĻŋāĻ˛ā§ āĻ¤āĻž āĻāĻžāĻ¨āĻž āĻāĻŋāĻ˛ āĻ¨āĻžāĨ¤
- āĻāĻ āĻŽā§āĻšā§āĻ°ā§āĻ¤ā§ 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 āĻāĻ° āĻāĻžāĻ āĻļā§āĻˇāĨ¤ āĻāĻŽāĻ°āĻž āĻāĻ° āĻĢā§āĻ°āĻ¤ āĻāĻ¸āĻŦ āĻ¨āĻž āĻāĻ āĻĒā§āĻ¯āĻžāĻā§āĻā§, āĻāĻĨāĻž āĻĻāĻŋāĻā§āĻāĻŋ…Â