Utilice el escáner para iterar el archivo línea por línea, aumentando el número de líneas en cada bucle.
Los ejemplos son los siguientes:
f,err := os.Open(path)
if err != nil {
return 0,err
}
defer f.Close()
// Splits on newlines by default.
scanner := bufio.NewScanner(f)
line := 1
// https://golang.org/pkg/bufio/#Scanner.Scan
for scanner.Scan() {
if strings.Contains(scanner.Text(),"yourstring") {
return line,nil
}
line++
}
if err := scanner.Err(); err != nil {
// Handle the error
}
Si necesita hacer esto en "miles de archivos" (según el comentario de otra respuesta), puede envolver este método en un grupo de trabajadores y ejecutarlo al mismo tiempo.