func retrieveDataFromFile(fname *string) ([]byte, error) { file, err := os.Open(*fname) checkError(err) defer file.Close() csvreader := csv.NewReader(file) var hdrs Headers hdrs, err = csvreader.Read() checkError(err) ITEMIDINDEX := hdrs.getHeaderIndex("itemid") ITEMNAMEINDEX := hdrs.getHeaderIndex("itemname") ITEMVALUEINDEX := hdrs.getHeaderIndex("itemvalue") ITEMTYPEINDEX := hdrs.getHeaderIndex("itemType") ProtoMessage := new(ProtobufTest.TestMessage) ProtoMessage.ClientName = proto.String(CLIENT_NAME) ProtoMessage.ClientId = proto.Int32(CLIENT_ID) ProtoMessage.Description = proto.String(CLIENT_DESCRIPTION) //loop through the records for { record, err := csvreader.Read() if err != io.EOF { checkError(err) } else { break } //Populate items testMessageItem := new(ProtobufTest.TestMessage_MsgItem) itemid, err := strconv.Atoi(record[ITEMIDINDEX]) checkError(err) testMessageItem.Id = proto.Int32(int32(itemid)) testMessageItem.ItemName = &record[ITEMNAMEINDEX] itemvalue, err := strconv.Atoi(record[ITEMVALUEINDEX]) checkError(err) testMessageItem.ItemValue = proto.Int32(int32(itemvalue)) itemtype, err := strconv.Atoi(record[ITEMTYPEINDEX]) checkError(err) iType := ProtobufTest.TestMessage_ItemType(itemtype) testMessageItem.ItemType = &iType ProtoMessage.Messageitems = append(ProtoMessage.Messageitems, testMessageItem) fmt.Println(record) } //fmt.Println(ProtoMessage.Messageitems) return proto.Marshal(ProtoMessage) }