GO gorm DB-Erstellung INSERT JSONUnmarshal Mysql

Hallo! GO lernt!

Diesmal möchte ich mit gorm einfügen!

Daten sind die API, die ich zuletzt erhalten habe Verwenden Sie die Daten von.

Der Artikel, der die Datenbank selbst aus GO erstellt hat, ist hier.

Dann möchte ich anfangen.

mysql.go

// root/app/models/fgi.go
package mysql

import (
	"database/sql"

	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
)

//SQLConnect DB-Verbindung
func SQLConnect() (database *gorm.DB, err error) {
	DBMS := "mysql"
	USER := "root"
	PASS := ""
	PROTOCOL := "tcp(localhost:3306)"
	DBNAME := "Tabellenname"

	CONNECT := USER + ":" + PASS + "@" + PROTOCOL + "/" + DBNAME + "?charset=utf8&parseTime=true&loc=Asia%2FTokyo"
	return gorm.Open(DBMS, CONNECT)
}

Hierbei wird davon ausgegangen, dass die DB bereits angelegt wurde. gorm ist das ORM-Paket von GO.

Deklarieren Sie in der Funktion SQLConnect () die DB-Informationen und

return gorm.Open(DBMS, CONNECT)

Auf diese Weise wird es mit db verbunden. Es ist möglicherweise besser, die DB-Informationen in Config usw. zusammenzufassen. Dieses Mal werden wir es als Root-Benutzer tun.

fgi/fgi.go

Dies ist der am Anfang eingeführte Artikel Dies ist die API-Datei, die Sie erhalten. Ich habe es gerade im obigen Artikel bekommen, aber hier Mit json.Unmarshal wird es in der vorbereiteten Struktur gespeichert.

Die Struktur ist hier json-to-go Sie können es einfach auf der Website vorbereiten.

Wenn Sie json von api auf der linken Seite einfügen, wird struct im Code vorbereitet.


package fgi

import (
	"encoding/json"
	"io/ioutil"
	"log"
	"net/http"
)

//APIClientFgi api Informationsspeicher
type APIClientFgi struct {
	key        string
	host       string
	httpClient *http.Client
}

//Neue Strukturgenerierung
func New(key, host string) *APIClientFgi {
	fgiClient := &APIClientFgi{key, host, &http.Client{}}
	return fgiClient
}

//StructFgi fgi Speicher
type StructFgi struct {
	Fgi struct {
		Current struct {
			Value     int    `json:"value"`
			ValueText string `json:"valueText"`
		} `json:"now"`
		PreviousClose struct {
			Value     int    `json:"value"`
			ValueText string `json:"valueText"`
		} `json:"previousClose"`
		OneWeekAgo struct {
			Value     int    `json:"value"`
			ValueText string `json:"valueText"`
		} `json:"oneWeekAgo"`
		OneMonthAgo struct {
			Value     int    `json:"value"`
			ValueText string `json:"valueText"`
		} `json:"oneMonthAgo"`
		OneYearAgo struct {
			Value     int    `json:"value"`
			ValueText string `json:"valueText"`
		} `json:"oneYearAgo"`
	} `json:"fgi"`
}

//GetFgi API-Ausführung
func (fgi *APIClientFgi) GetFgi() (StructFgi, error) {

	url := "https://fear-and-greed-index.p.rapidapi.com/v1/fgi"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("x-rapidapi-host", fgi.host)
	req.Header.Add("x-rapidapi-key", fgi.key)

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		return StructFgi{}, nil
	}

	defer res.Body.Close()

	body, err := ioutil.ReadAll(res.Body)
	if err != nil {
		return StructFgi{}, nil
	}

	var fgiStruct StructFgi
	if err := json.Unmarshal(body, &fgiStruct); err != nil {
		log.Fatal(err)
	}

	return fgiStruct, nil
}

Die von json-to-go generierte Struktur wird von json.Unmarshal aufgerufen und in der Struktur gespeichert.

models/fgi.go

In dieser Datei werden die in der obigen Struktur gespeicherten API-Informationen erweitert und in die Datenbank eingefügt.

package models

import (
	"fmt"
	"index-indicator-apis/mysql"
	"time"

	"index-indicator-apis/config"
	"index-indicator-apis/fgi"
)

const (
	tableNameFgis = "fgis"
)

//Fgis tägliche Lagerung
type Fgis struct {
	CreatedAt time.Time `json:"created_at,omitempty"`
	NowValue  int       `json:"now_value,omitempty"`
	NowText   string    `json:"now_text,omitempty"`
	PcValue   int       `json:"pc_value,omitempty"`
	PcText    string    `json:"pc_text,omitempty"`
	OneWValue int       `json:"one_w_value,omitempty"`
	OneWText  string    `json:"one_w_text,omitempty"`
	OneMValue int       `json:"one_m_value,omitempty"`
	OneMText  string    `json:"one_m_text,omitempty"`
	OneYValue int       `json:"one_y_value,omitempty"`
	OneYText  string    `json:"one_y_text,omitempty"`
}

//initFgis-Migration
func initFgis() {
	var err error
	db, err := mysql.SQLConnect()
	if err != nil {
		panic(err.Error())
	}
	defer db.Close()
	db.AutoMigrate(&Fgis{})
}

// NewFgis fgi.Empfängt StructFgi, konvertiert es in Fgis und gibt es zurück


func NewFgis(f fgi.StructFgi) *Fgis {
	createdAt := time.Now()
	nowValue := f.Fgi.Current.Value
	nowText := f.Fgi.Current.ValueText
	pcValue := f.Fgi.PreviousClose.Value
	pcText := f.Fgi.PreviousClose.ValueText
	oneWValue := f.Fgi.OneWeekAgo.Value
	oneWText := f.Fgi.OneWeekAgo.ValueText
	oneMValue := f.Fgi.OneMonthAgo.Value
	oneMText := f.Fgi.OneMonthAgo.ValueText
	oneYValue := f.Fgi.OneYearAgo.Value
	oneYText := f.Fgi.OneYearAgo.ValueText

	return &Fgis{
		createdAt,
		nowValue,
		nowText,
		pcValue,
		pcText,
		oneWValue,
		oneWText,
		oneMValue,
		oneMText,
		oneYValue,
		oneYText,
	}
}

//Speichern Neue Fgis erstellen
func (f *Fgis) Create() error {
	db, err := mysql.SQLConnect()
	if err != nil {
		panic(err.Error())
	}
	defer db.Close()
	db.Create(&f)
	return err
}

//Drücken Sie nach der Migration von CreateNewFgis auf api und speichern Sie es in db
func CreateNewFgis() error {
	// initFgis() migration
	fgiClient := fgi.New(config.Config.FgiAPIKey, config.Config.FgiAPIHost)
	f, err := fgiClient.GetFgi()
	if err != nil {
		return err
	}
	fgi := NewFgis(f)
	fmt.Println(fgi)
	fmt.Println(fgi.Create())
	return err
}

InitFgis () verwendet die gorm-Methode für die Migration. Da die API-Informationen früher in der Struktur gespeichert wurden, bedeutet dies, dass eine Struktur vorbereitet wird, die sie erweitert und den erweiterten Wert speichert. db.AutoMigrate (& Fgis {}) Dies ist die AutoMigrate-Methode der Gorm-Methode. Der Name der zuvor vorbereiteten Struktur wird als Tabellenname migriert. In diesem Fall Eine Tabelle namens fgis wird in MySQL erstellt.

func NewFgis(f fgi.StructFgi) *Fgis{} Hier wird der Inhalt von StructFgi, in dem API-Daten gespeichert sind, erweitert und in der für INSERT vorbereiteten Struktur (migriert) gespeichert.

func (f *Fgis) Create() error {} Bei dieser Methode wird nach dem Herstellen einer Verbindung mit dQ mit SQLConnect () die in der MySQL-Datei erstellte Funktion erstellt

db.Create(&f) INSERT wird realisiert von. .Create ist die Methode von Gorm. Durch Ausführen von .Create (& struct) werden die Informationen der Struktur, die dem Tabellennamen entspricht, eingefügt.

Schließlich werden die von "CreateNewFgis ()" vorbereiteten Funktionen und Methoden ausgeführt.

Ich konnte diese Funktion sicher ausführen, indem ich sie von main.go aus aufrief.

das ist alles!

Recommended Posts

GO gorm DB-Erstellung INSERT JSONUnmarshal Mysql
Erstellen Sie eine CRUD-App mit Go with Mysql, GORM, Echo, Clean Architecture