参考结论 单次调用性能:操作符+>strings.Join>=bytes.Buffer>fmt.Sprintf 灵活性:bytes.Buffer>fmt.Sprintf>=strings.Join>操作符+

    1. package main
    2. import (
    3. "bufio"
    4. "bytes"
    5. "fmt"
    6. "os"
    7. "strings"
    8. )
    9. func scanandreadandjoin() {
    10. input := "foo bar baz" // or os.Stdin
    11. var buf bytes.Buffer
    12. scanner := bufio.NewScanner(strings.NewReader(input))
    13. scanner.Split(bufio.ScanWords)
    14. for scanner.Scan() {
    15. fmt.Println(scanner.Bytes())
    16. buf.Write(scanner.Bytes())
    17. }
    18. output := buf.Bytes()
    19. fmt.Println(output, output[0])
    20. }
    21. func main() {
    22. var buf bytes.Buffer
    23. scanner := bufio.NewScanner(os.Stdin)
    24. scanner.Split(bufio.ScanWords)
    25. for scanner.Scan() {
    26. fmt.Println(scanner.Bytes())
    27. buf.Write(scanner.Bytes())
    28. }
    29. output := buf.Bytes()
    30. fmt.Println(output, output[0])
    31. // scanandreadandjoin()
    32. }