У меня есть одна таблица, необходимая для зарядки в моем приложении. Я пытаюсь загрузить эту таблицу в структуру JSON и использовать ее в качестве кеша. Это мой подход:
таблица:
CREATE TABLE `lwratecarddefinition` (
`RATECARDID` int(10) DEFAULT NULL AUTO_INCREMENT,
`RATECARDGROUPID` int(10) DEFAULT NULL,
`SERVICEID` varchar(10) DEFAULT NULL,
`USAGETYPEID` varchar(10) DEFAULT NULL,
`CURRENCYCODE` varchar(4) DEFAULT NULL,
`LEDGERID` varchar(15) DEFAULT NULL,
`PULSE` varchar(10) DEFAULT NULL,
`SPECIALPULSE` varchar(10) DEFAULT NULL,
`NORMALRATE` varchar(10) DEFAULT NULL,
`OFFPEAKSET` varchar(2) DEFAULT NULL,
`OFFPEAKRATE` varchar(10) DEFAULT NULL,
`PEAKRATE` varchar(10) DEFAULT NULL,
`ONDEMANDSET` varchar(2) DEFAULT NULL,
`ONDEMANDRATE` varchar(2) DEFAULT NULL,
KEY `idx_lwratecarddefinition_RATECARDID` (`RATECARDID`),
KEY `idx_lwratecarddefinition_RATECARDGROUPID` (`RATECARDGROUPID`),
KEY `idx_lwratecarddefinition_USAGETYPEID` (`USAGETYPEID`),
KEY `idx_lwratecarddefinition_SERVICEID` (`SERVICEID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
main. go фрагмент кода - (моя цель - получать записи каждые 1 минуту, используя процедуру go)
// load the ratecard first
lwratecardefinition = getRatecard()
// update data every 1 second
go func() {
for {
time.Sleep(time.Second)
lwratecardefinition = getRatecard()
fmt.Println(lwratecardefinition)
}
}()
dbfunction. go
package main
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
type Lwratecardefinition struct {
Ratecardid int `json:"ratecardid"`
Ratecardgroupid int `json:"ratecardgroupid"`
Serviceid int `json:"serviceid"`
Usagetypeid int `json:"usagetypeid"`
Currencycode int `json:"currencycode"`
Ledgerid string `json:"ledgerid"`
Pulse int `json:"pulse"`
Specialpulse int `json:"specialpulse"`
Normalrate int `json:"normalrate"`
Offpeakset int `json:"offpeakset"`
Offpeakrate int `json:"offpeakrate"`
Peakrate int `json:"peakrate"`
Ondemandset int `json:"ondemandset"`
Ondemandrate int `json:"ondemandrate"`
}
var lwratecardefinition Lwratecardefinition
func getRatecard() Lwratecardefinition {
db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/bcsdb")
// if there is an error opening the connection, handle it
if err != nil {
panic(err.Error())
}
// defer the close till after the main function has finished
// executing
defer db.Close()
var ratecardid,ratecardgroupid,serviceid,usagetypeid,currencycode,pulse,specialpulse,normalrate,offpeakset,offpeakrate,peakrate,ondemandset,ondemandrate int
var ledgerid string
results, err := db.Query("select ratecardid,ratecardgroupid,serviceid,usagetypeid,currencycode,ledgerid,pulse,specialpulse,normalrate,offpeakset,offpeakrate,peakrate,ondemandset,ondemandrate from lwratecarddefinition")
if err != nil {
panic(err.Error())
}
for results.Next() {
err = results.Scan(&ratecardid,&ratecardgroupid,&serviceid,&usagetypeid,¤cycode,&ledgerid,&pulse,&specialpulse,&normalrate,&offpeakset,&offpeakrate,&peakrate,&ondemandset,&ondemandrate)
lwratecardefinition = Lwratecardefinition{Ratecardid: ratecardid, Ratecardgroupid: ratecardgroupid, Serviceid: serviceid, Usagetypeid: usagetypeid, Currencycode: currencycode, Ledgerid: ledgerid, Pulse: pulse, Specialpulse: specialpulse, Normalrate: normalrate, Offpeakset: offpeakset, Offpeakrate: offpeakrate, Peakrate: peakrate, Ondemandset: ondemandset, Ondemandrate: ondemandrate}
}
return lwratecardefinition
}
Но когда я запускаю программу, я получаю только одну строку, а не все строки из таблицы mysql. Мне нужны все строки, чтобы использовать его в качестве кеша. output:
{4 508 1 201 1 DATA 60 30 2 1 3 1 1 5}
Также моя конечная цель - использовать эти значения для нахождения скорости и пульса. Если Ratecardgroupid = X value и Serviceid = Y value, я хочу использовать значение пульса из той же строки. Пожалуйста, предложите, что здесь не так, и если подход подходит для уменьшения количества обращений к базе данных, logi c.