rest - 如何使用 Golang 实现导入数据功能?

标签 rest csv go go-gin

我有 2 个方法,用于 GETPOST。 第一个是:

 var Join map[string]int

func MapTheFields(c *gin.Context) {
 var data []string
 //Open the csv file
 csvFile, _ := os.Open("customers.csv")
 reader := csv.NewReader(csvFile)
 line, _ := reader.ReadAll()
 for i := 0; i < len(line[0]); i++ {
     Join = map[string]int{
         line[0][i]: i,
     }
     data = append(data, line[0][i])
 }
 GetSuccessResponse(c, "The Mappings are:", data)

 }

第二个也和第一个类似。它只是将值保存到数据库中。

我一直面临的问题是,我必须将从 csv 文件中获取的字段映射到我项目中的字段,为此我制作了一个名为 Join 的映射如上所示,我正在访问第二个函数中 line 的值作为

行[i][加入["姓氏"]]

但我得到的 Join["Last Name"] 的值为 0,即使它的值为 1,无论我在哪里我使用连接作为索引,值为零,我总是只得到前 4 个值,然后是索引越界错误。

休息代码是:

func ImportCustomerData(c *gin.Context) {
//Open the csv file
csvFile, _ := os.Open("customers.csv")
reader := csv.NewReader(csvFile)
var (
    user      models.User
    customer  models.Customer
    address   models.UserAddress
    addresses []models.UserAddress
    people    []models.Customer
    users     []models.User
)

line, _ := reader.ReadAll()
for i := 1; i < len(line[0]); i++ {

    //Initialize address details

    address.Address = line[i][Join["address"]]
    address.City = line[i][Join["City"]]
    address.State = line[i][Join["State"]]
    address.Zipcode = line[i][Join["Postal Code"]]

    savedAddress := SaveNewAddress(address, merchantDb)

    //Initalize user details
    user.FirstName = line[i][Join["First Name"]]
    user.LastName = line[i][Join["Last Name"]]
    user.CompanyName = line[i][Join["Company Name"]]
    user.EmailId = line[i][Join["Email"]]
    user.PhoneNumber = line[i][Join["Phone"]]
  }
}

Postman 中第一个函数的输出是: { “回复”: { “代码”:200, “api_status”:1, "message": "映射是:", “数据”: [ “名”, “姓”, “公司名”, “电子邮件”, “地址”, “城市”, “状态”, “邮政编码”, “电话”, “创建日期”, “条纹ID”, “首次预订日期”, “最后预订日期”, “上次预订频率”, “下次预订日期”, “笔记”, “顾客ID” ] } }

我哪里做错了?

最佳答案

您每次都在 MapTheFields() 中分配一个新 map :

 for i := 0; i < len(line[0]); i++ {
     Join = map[string]int{
         line[0][i]: i,
     }
     data = append(data, line[0][i])
 }

Join 类型的map,应该先分配,这样声明Join:

Join = make(map[string]int) //declaration can be global

MapTheFields() 中的代码片段替换为以下代码片段:

 for i := 0; i < len(line[0]); i++ {
     Join[line[0][i]] = i
     data = append(data, line[0][i])
 }

关于rest - 如何使用 Golang 实现导入数据功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52664182/

相关文章:

web-services - 如何创建RESTful计算器?

linux - CSV grep 但保留标题

r - 在 R 中写入 csv 文件时的分隔符

php - 如何在 php 中显示 CSV 文件中的特定列?

go - Go 中的 SNMP 代理

java - 无法处理请求 [GET http ://localhost:8080 ]: Response status 404 Spring, RESTful,thymeleaf

php - 如何在 Box-API 中使用应用程序用户 ID 创建访问 token ?

java - Spring MVC 编码非英文参数

sql - 我应该将常见的 SQL 查询或 CTE 分开并放在一个变量中吗?

go - K8s中如何根据与pod的交互获取用户的ip