Equivalente de Golang para a compreensão da lista do Python

Eu estou jogando com o Go, mas estou tendo muita dificuldade em fazer coisas que são muito simples em outros idiomas.

Gostaria de reproduzir uma syntax semelhante:

array = [a for a in anotherArray if (some condition)] 

O que é uma maneira elegante de fazer isso em Go? Eu realmente gostaria de simplificar meu código, especialmente ao usar a function no array. Por exemplo:

 min = min(abs(a[i], b[j]) for i in range(n) for j in range(i, n)) 

Muito Obrigado

Curiosamente, Rob Pike acabou de propor (18 horas atrás) o filtro da biblioteca que faz um pouco o que você quer:

Veja por exemplo Choose ()

 // Choose takes a slice of type []T and a function of type func(T) bool. (If // the input conditions are not satisfied, Choose panics.) It returns a newly // allocated slice containing only those elements of the input slice that // satisfy the function. 

Testado aqui :

 func TestChoose(t *testing.T) { a := []int{1, 2, 3, 4, 5, 6, 7, 8, 9} expect := []int{2, 4, 6, 8} result := Choose(a, isEven) 

Como twotwotwo indica nos comentários , o GoDoc para esta biblioteca indica:

O filter pacote contém funções de utilitário para filtrar fatias através da aplicação distribuída de uma function de filtro.

O pacote é uma experiência para ver como é fácil escrever essas coisas no Go. É fácil, mas for loops são tão fáceis e mais eficientes .

Você não deve usar este pacote.

Esta ressalva é refletida no documento ” Resumo das Go Generics Discussions “, seção ” Código Funcional “:

Estas são as funções habituais de ordem superior , como map , reduce ( fold ), filter , zip etc.

Casos :
transformações de dados typesafe: map , fold , zip

Prós para usar genéricos :
Forma concisa de expressar transformações de dados.

Contras para uso de genéricos :
A solução mais rápida precisa levar em conta quando e qual ordem aplicar essas transformações e quantos dados são gerados em cada etapa.
É mais difícil de ler para iniciantes.

Soluções alternativas :

use for loops e construções de linguagem usuais .

Se o que você está procurando é realmente compreensão da lista python, não existe equivalente sintático em ir AFAIK.

A maneira de fazer isso é criar uma function que use uma fatia e uma function (para testar a condição) e retornar uma nova fatia.

EDIT: Bem parece que já existe esse recurso no Go. cf VonC

    Intereting Posts