, так как вы собираетесь сортировать строки, вам нужно прочитать весь файл.вы можете либо сделать файл с помощью io/ioutil.ReadAll
, либо просто написать небольшую функцию.когда у вас есть строки файла, их сортировка может быть выполнена с помощью вызова sort.Strings
.Я добавлю, возможно, слишком многословную версию, которая, надеюсь, иллюстрирует, как это можно сделать.Я также рекомендую прочитать это превосходное объяснение того, как работает пакет сортировки go: Пакет сортировки Go
package main
import (
"os"
"bufio"
"fmt"
"sort"
)
// slurp file into slice of lines/strings
func slurp(f string) (lines []string, e os.Error) {
var fd *os.File
var line string
var bufRd *bufio.Reader
var keepReading bool = true
fd, e = os.Open(f)
if e != nil {
return nil, e
}
defer fd.Close()
bufRd = bufio.NewReader(fd)
for keepReading {
line, e = bufRd.ReadString('\n')
switch e {
case nil:
lines = append(lines, line)
case os.EOF:
lines = append(lines, line)
keepReading = false
default:
return lines, e
}
}
return lines, nil
}
// test stuff out..
func main() {
if len(os.Args) > 1 {
lines, e := slurp(os.Args[1])
if e != nil {
fmt.Fprintf(os.Stderr,"%s\n", e)
os.Exit(1)
}
fmt.Println("\n----- unsorted -----\n")
for _, line := range lines {
fmt.Printf("%s", line)
}
fmt.Println("\n----- sorted -----\n")
sort.Strings(lines)
for _, line := range lines {
fmt.Printf("%s", line)
}
}
}
обратите внимание, что сортировка на месте, поэтому она ничего не возвращает