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)