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

How To Implement Import data Functionality With Golang?

我有 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"]]

但是我得到的 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 中第一个函数的输出是: { "response": { "code": 200, "api_status": 1, "message": "The Mappings are:", "data": [ "First Name", "Last Name", "Company Name", "Email", "Address", "City", "State", "Postal Code", "Phone", "Date Created", "Stripe ID", "Date of First Booking", "Date of Last Booking", "Frequency of Last Booking", "Date of Next Booking", "Notes", "Customer ID" ] } }

我哪里做错了?

您在 MapTheFields() 中每次分配新地图:

 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])
 }