Как разделить содержимое файла с помощью Golang без дублирования использования оперативной памяти

#go

#Вперед

Вопрос:

С помощью приведенного ниже кода я могу открыть файл и разделить его содержимое в каждом чате | . Однако мой размер файла огромен, и мне нужно оптимизировать использование памяти. Если вы внимательно посмотрите на приведенный ниже код, каждый раз, когда мне приходится дублировать использование памяти, просто чтобы присвоить значение другой переменной (другого типа).

Как я могу разделить содержимое файла на определенный символ с наименьшим количеством ненужной памяти?

 temp3292,_ := ioutil.ReadFile("C:\file.txt");
temp1114 := string(temp3292);
//Cleaning memory.
temp3292 = nil;
temp5078 := strings.Split(strings.Trim(temp1114,"|"),"|");
//Cleaning memory again.
temp1114 = "";

my_array := map[string]bool{};

for _,valor67 := range temp5078 {

    my_array[valor67] = true;

}

//Again, cleaning memory again.
temp5078 = nil;
  

Комментарии:

1. Строки более удобны, но менее эффективны. Если вы ищете эффективность, вам нужно придерживаться []byte .

Ответ №1:

Чтобы избежать дублирования данных в памяти, оставайтесь в байтовых фрагментах и просто перережьте их:

 fileContent,_ := ioutil.ReadFile("C:\file.txt");
sepPos := bytes.Index(fileContent, []byte('|'));
firstHalf := fileContent[:sepPos]
secondHalf := fileCOntent[sepPos 1:]
  

Вы найдете полезные помощники в bytes пакете и некоторые основы в блоге Go.