Golang I/Oノート
2448 ワード
1.基礎
str := fmt.Sprintf("num is %f", 3.1415926)
fmt.Fprintln(os.Stdout, "hello
")
2.構造体出力
type Data struct {
}
func (self Data) String() string {
return "data"
}
3.基本的なIOインタフェース
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
}
data, _ := ReadFrom(strings.NewReader("Helloworld", 12))
コマンドライン読み込み入力
data, _ := ReadFrom(os.Stdin, 11)
ファイルの読み込み
file, _ := os.Open("main.go")
defer file.Close()
data, _ = ReadFrom(file, 9)
バッファIO
strReader := strings.NewReader("helloworld")
bufReader := bufio.NewReader(strReader)
data, _ := bufReader.Peek(5) // 5
i := bufReader.Buffered() //
str, _ := bufReader.ReadString(' ') // , string
//
w := bufio.NewWriter(os.stdOut)
fmt.Fprint(w, "Hello ")
w.Flush() //
統計ファイルの行数
func main() {
if len(os.Args) < 2 {
return
}
filename := os.Args[1]
file, _ := op.Open(filename)
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
reader := bufio.NewReader(file)
line := 0
for {
_,isPrefix,err := reader.ReadLine()
if err != nil {
break
}
if !isPrefix {// isPrefix == true
line++
}
}
}
バイナリファイルの読み込み
//
img, _ := os.Open("image.png")
defer img.Close()
var headA,headB byte
binary.Read(img, binary.BigEndian, &headA )
binary.Read(img, binary.BigEndian, &headB )
var size uint32
binary.Read(img, binary.BigEndian, &size )
var reversedA, reversedB uint16
binary.Read(img, binary.BigEndian, &reversedA )
binary.Read(img, binary.BigEndian, &reversedA )
var offbits uint32
binary.Read(img, binary.BigEndian, &offbits )
structによるファイルヘッダの読み取り
type bitmapHeader struct {
Size uint32
Width int32
Height int32
Places uint16
BitCount uint16
Compression uint32
SizeImage uint32
XperlsPerMeter int32
YperlsPerMeter int32
ClsrUsed uint32
ClrImportant uint32
}
bitmapInfoHeader := new(bitmapHeader)
binry.Read(image, binary.BigEndian, bitmapInfoHeader)