Привет, учу GO, параллельно пытаюсь написать приложение на GO простая работа с API twitch, но я не могу понять как правильно организовать структуру проекта(из-за нехватки опыта в разработке) уже 3 день сижу кручу-верчу и не знаю как правильно сделать, сейчас делаю вот так:
goTwitch - корневая директория проекта
- model - работа с бд и консулом
- controller - сюда запихиваю обработку конфигов(парсеры) пока не придумал что тут еще будет
- route - это роуты приложения
- templates - это темплейты приложения
Что-то мне кажется эта структура какая-то хрень
main файл выглядит пока вот так
package main
import (
"goTwitch/controller"
"fmt"
"net/http"
"time"
"log"
"goTwitch/route"
)
func main() {
Serverconfig := controller.ConfigPars() //парсим конфиг
handler := http.NewServeMux()
handler.HandleFunc("/hello/" , route.Handlers(w http.Request, r *http.Request{})) - Это функция обработчик из файла route
s := http.Server{ //Параметры сервера
Addr: Serverconfig.Port,
Handler: handler,
ReadTimeout: time.Duration(Serverconfig.ReadTimeout) * time.Second,
WriteTimeout: time.Duration(Serverconfig.WriteTimeout) * time.Second,
}
log.Fatal(s.ListenAndServe()) -//запуск сервера
}
Файл route
package route
import "net/http"
func Handlers(r *http.Request) {
Каокй-то код обработки
}
config.go - парсим yaml с конфигурацией веб сервера
package controller
import (
"io/ioutil"
"path/filepath"
"gopkg.in/yaml.v2"
"log"
)
type Serverconfig struct {
Port string `yaml:"Port"`
ReadTimeout int `yaml:"ReadTimeout"`
WriteTimeout int `yaml:"WriteTimeout"`
}
func ConfigPars() *Serverconfig {
filename, _ := filepath.Abs("./config.yml")
yamlFile, err := ioutil.ReadFile(filename)
if err != nil {
panic(err)
}
Serverconfig := &Serverconfig{}
//err = yaml.Decoder{ &Serverconfig}
err = yaml.Unmarshal(yamlFile, &Serverconfig)
if err != nil {
log.Fatal(err)
}
return Serverconfig
}
Пока все это выглядит вот так ,уже перепробовал много вариантов пока думаю остановится на этом, но чую это тоже не верный подход.
Есть еще вопрос касательный парсера yaml файла, если из файла yaml убрать Port: :9090 конфиг парсится и не ругается на то что не совпадает со структурой в go, что я делаю не правильно? вроде если по структуре в go файл не совпадает то Анмаршл вроде же ошибку должен отдать?