Я новичок в golang. Во время выполнения этого документа я заметил странное поведение при выполнении цикла for.
package main;
import (
"log"
"strings"
"time"
)
type data struct {
elapseTime int64
data string
}
func main(){
for i := 0 ; i < 10; i++{
c := make(chan data);
go removeDuplicates("I love oranges LALALA I LOVE APPLES LALALA XD", c);
log.Printf("%v", <- c);
}
}
func removeDuplicates(value string , c chan data){
start := time.Now();
var d = data{};
var r string;
value = strings.ToLower(value);
var m = make(map[string]string);
splitVals := strings.Split(value, " ");
for _, element := range splitVals {
if _, ok := m[element]; ok == false {
m[element] = element;
}
}
for k, _ := range m {
r = r + k + " ";
}
d.data = strings.TrimRight(r, "");
d.elapseTime = time.Since(start).Nanoseconds();
c <- d;
}
По сути, я пытаюсь добиться того, чтобы удалить дубликаты простой строки и распечатать эту информацию вместе с затраченным временем.цикл проходит через подпрограмму go 10 раз, ожидая получения ответов по каналу.
2019/05/24 00:55:49 {18060 i love oranges lalala apples xd }
2019/05/24 00:55:49 {28930 love oranges lalala apples xd i }
2019/05/24 00:55:49 {10393 i love oranges lalala apples xd }
2019/05/24 00:55:49 {1609 oranges lalala apples xd i love }
2019/05/24 00:55:49 {1877 i love oranges lalala apples xd }
2019/05/24 00:55:49 {1352 i love oranges lalala apples xd }
2019/05/24 00:55:49 {1708 i love oranges lalala apples xd }
2019/05/24 00:55:49 {1268 apples xd i love oranges lalala }
2019/05/24 00:55:49 {1736 oranges lalala apples xd i love }
2019/05/24 00:55:49 {1037 i love oranges lalala apples xd }
Вот что я вижу: первые несколько отпечатков цикла (не имеет значения, является ли один цикл или100x loop) будет значительно медленнее, чем остальные циклы.Есть ли причина, почему это так?(время выполнения в наносекундах между прочим)
Редактировать: удаление части переключателя, так как люди запутались в вопросе.