У меня есть функция, которая запрашивает два набора данных. Я хочу найти совпадение в двух наборах данных и обновить нашу базу данных данными из основного набора данных.
Проблема в том, что данные являются типами интерфейса. Я хотел бы перебрать их и найти соответствие, но я не уверен, что есть лучшая идея.
Как перебрать интерфейсы в Go и сопоставить эти точки данных в функции BackfillMissingData?
Это то, что я имею до сих пор.
type Account struct {
SalesForceAccountId string
}
func FindIncompleteAccounts(qExec *database.PostgresDB) interface{} {
var salesForceAccountId string
rows, err := qExec.Query(
`query string`)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
var accounts []Account
for rows.Next() {
err := rows.Scan(&salesForceAccountId)
if err != nil {
log.Fatal(err)
}
accounts = append(accounts, Account{SalesForceAccountId: salesForceAccountId})
}
err = rows.Err()
if err != nil {
log.Fatal(err)
}
return accounts
}
var client = &http.Client{Timeout: 10 * time.Second}
type Payload struct {
Companies []Companies `json:"companies"`
}
type Companies struct {
CompanyId int `json:"companyId"`
Properties struct {
SalesForceAccountId struct {
Value string `json:"value"`
}
}
}
func RequestCompanies() interface{} {
url := fmt.Sprintf("external api", apiKey)
client := http.Client{
Timeout: time.Second * 2,
}
req, err := http.NewRequest("GET", url, nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("User-Agent", "fetching-companies")
res, getErr := client.Do(req)
if getErr != nil {
log.Fatal(getErr)
}
body, readErr := ioutil.ReadAll(res.Body)
if readErr != nil {
log.Fatal(readErr)
}
companies := Payload{}
jsonErr := json.Unmarshal([]byte(body), &companies)
if jsonErr != nil {
log.Fatal(err)
}
return companies
}
func BackfillMissingData(qExec *database.PostgresDB) error {
companies := RequestCompanies()
incompleteAccounts := FindIncompleteAccounts(qExec)
}
Набор основных данных
{[{837002081 {{0012a00000IO7ToAAL}}} {837404922 {{001U000000i0xngIAA}}} {840907652 {{0012a00000Icl6gAAB}}}]}
Локальный набор данных
[{0010B00001qY5GoRAS}]
Первое число в наборе основных данных - это идентификатор компании, и я хочу сравнить второй элемент в основном наборе с моими локальными данными.