Preallocate slices; avoide append() reallocations when copying data
This commit is contained in:
		| @@ -51,33 +51,32 @@ func delNodes(old, del []*Node) []*Node { | |||||||
|  |  | ||||||
| // Copy makes a copy of services | // Copy makes a copy of services | ||||||
| func Copy(current []*Service) []*Service { | func Copy(current []*Service) []*Service { | ||||||
| 	var services []*Service | 	services := make([]*Service, len(current)) | ||||||
|  | 	for i, service := range current { | ||||||
| 	for _, service := range current { |  | ||||||
| 		// copy service | 		// copy service | ||||||
| 		s := new(Service) | 		s := new(Service) | ||||||
| 		*s = *service | 		*s = *service | ||||||
|  |  | ||||||
| 		// copy nodes | 		// copy nodes | ||||||
| 		var nodes []*Node | 		nodes := make([]*Node, len(service.Nodes)) | ||||||
| 		for _, node := range service.Nodes { | 		for j, node := range service.Nodes { | ||||||
| 			n := new(Node) | 			n := new(Node) | ||||||
| 			*n = *node | 			*n = *node | ||||||
| 			nodes = append(nodes, n) | 			nodes[j] = n | ||||||
| 		} | 		} | ||||||
| 		s.Nodes = nodes | 		s.Nodes = nodes | ||||||
|  |  | ||||||
| 		// copy endpoints | 		// copy endpoints | ||||||
| 		var eps []*Endpoint | 		eps := make([]*Endpoint, len(service.Endpoints)) | ||||||
| 		for _, ep := range service.Endpoints { | 		for j, ep := range service.Endpoints { | ||||||
| 			e := new(Endpoint) | 			e := new(Endpoint) | ||||||
| 			*e = *ep | 			*e = *ep | ||||||
| 			eps = append(eps, e) | 			eps[j] = e | ||||||
| 		} | 		} | ||||||
| 		s.Endpoints = eps | 		s.Endpoints = eps | ||||||
|  |  | ||||||
| 		// append service | 		// append service | ||||||
| 		services = append(services, s) | 		services[i] = s | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return services | 	return services | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user