Skip to content

输入输出

格式化IO

package main

import (
    "fmt"
    "os"
)

// 定一个名为Data的结构体
type Data struct {
}

// 声明一个String()的成员的函数,返回值是个字符串
func (self Data) String() string {
    return "Data"
}

func main() {
    // 直接输出
    fmt.Print("你好色彩\n")

    // 直接输出 自动换行,能打印多个
    fmt.Println("你好色彩", "佳能")

    // %d 整型、%s字符串、%v自动识别类型
    fmt.Printf("slogan: %v\n", "你好色彩")

    // str := 等同于 var str string
    // Sprintf 格式化输出成返回值
    str := fmt.Sprintf("π means: %f", 3.1415926)
    fmt.Println(str)

    // 可以输出到指定的接口中
    fmt.Fprintln(os.Stdout, "A")

    // 调用Data
    // 如果是个Data{}结构体的话 会尝试默认调用 String()
    fmt.Printf("%v\n", Data{})
}


// 输出
MacintoshdeMacBook-Pro-139:io elasticnotes$ go run io.go 
你好色彩
你好色彩 佳能
slogan: 你好色彩
π means: 3.141593
A
Data

格式化IO接口 I

package main

import (
    "fmt"
    "io"
    "strings"
)

// 读取字符串的例子
func ReadFrom(reader io.Reader, num int) ([]byte, error) {
    // 切片
    p := make([]byte, num)
    n, err := reader.Read(p)
    if n > 0 {
        return p[:n], nil
    }
    return p, err
}

func sampleReadFromString() {
    data, _ := ReadFrom(strings.NewReader("from strings"), 12)
    fmt.Println(data)
}

func main() {
    sampleReadFromString()
}


// 输出
MacintoshdeMacBook-Pro-139:io elasticnotes$ go run iobase.go 
[102 114 111 109 32 115 116 114 105 110 103 115]

格式化IO接口 II

package main

import (
    "fmt"
    "io"
    "os"
)

func ReadFrom(reader io.Reader, num int) ([]byte, error) {
    // 切片
    p := make([]byte, num)
    n, err := reader.Read(p)
    if n > 0 {
        return p[:n], nil
    }
    return p, err
}

// 读取从命令行输入的内容
func sampleReadStdin() {
    fmt.Println("please input stdin:")
    data, _ := ReadFrom(os.Stdin, 11)
    fmt.Println(data)
}

func main() {
    sampleReadStdin()
}

// 输出
MacintoshdeMacBook-Pro-139:io elasticnotes$ go run io2.go 
please input stdin:
123456789 // 输入
[49 50 51 52 53 54 55 56 57 10]
package main

import (
    "fmt"
    "io"
    "os"
)

func ReadFrom(reader io.Reader, num int) ([]byte, error) {
    // 切片
    p := make([]byte, num)
    n, err := reader.Read(p)
    if n > 0 {
        return p[:n], nil
    }
    return p, err
}

// 从文件读取
func sampleReadFile() {
    file, _ := os.Open("io.go")
    defer file.Close()
    // 从文件读取9个字节
    data, _ := ReadFrom(file, 9)
    // fmt.Println(data)
    fmt.Println(string(data))
}

func main() {
    sampleReadFile()
}

// 输出
MacintoshdeMacBook-Pro-139:io elasticnotes$ go run io2.go 
please input stdin:
// [112 97 99 107 97 103 101 32 109]
package m

缓冲IO

package main

import (
    "bufio"
    "fmt"
    "strings"
)

func main() {
    strReader := strings.NewReader("你好 世界")

    bufReader := bufio.NewReader(strReader)

    // Peek() 返回缓存的一个切片,该切片引用缓存中前n个字节数据
    data, _ := bufReader.Peek(5)

    fmt.Println(string(data))
    // bufReader.Buffered() 缓冲区有多少个字节
    fmt.Println(data, bufReader.Buffered())
}

// 输出
MacintoshdeMacBook-Pro-139:io elasticnotes$ go run bufio.go 
?
[228 189 160 229 165] 13