LoginSignup
1
0

More than 1 year has passed since last update.

Goで任意サイズの一時ファイルを作って送信

Posted at

動機

ネットワークのパフォーマンス計測のために任意サイズのデータを送信したかったので、送りたいデータのサイズの一時ファイルを作って送信してみた。

実装

main.go
package main

import (
	"flag"
	"io"
	"io/ioutil"
	"net"
	"os"
)

var size int64

func init() {
	flag.Int64Var(&size, "size", 1e9, "data size to be sent")
	flag.Parse()
}

func main() {
	conn, err := net.Dial("tcp", "localhost:8000")
	if err != nil {
		panic(err)
	}
	defer conn.Close()

	file, err := ioutil.TempFile("", "")
	if err != nil {
		panic(err)
	}
	defer os.Remove(file.Name())

	if err := file.Truncate(size); err != nil {
		panic(err)
	}

	var offset int64 = 0
	buf := make([]byte, 1024)
	for {
		nr, errRead := file.ReadAt(buf, offset)
		if errRead != nil && errRead != io.EOF {
			panic(err)
		}

		offset += int64(nr)
		if _, err := conn.Write(buf[:nr]); err != nil {
			panic(err)
		}

		if errRead == io.EOF {
			break
		}
	}
}

参考資料

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0