Se os documentos forem armazenados com IDs de string, o código parecerá correto.
Os ids se parecem com ids de objetos codificados em hexadecimal. Se os identificadores de objeto forem IDs de objeto, você precisará converter as strings hexadecimais em IDs de objeto:
oids := make([]bson.ObjectId, len(ids))
for i := range ids {
oids[i] = bson.ObjectIdHex(ids[i])
}
query := bson.M{"_id": bson.M{"$in": oids}}