Go言語でutf8のbomを削除する

関連 : Python2でutf8のbomを削除する - brainstorm


TrimPrefixが使える

package main

import (
	"bytes"
	"flag"
	"fmt"
	"io/ioutil"
	"os"
)

var UTF8_BOM = []byte{239, 187, 191}

func hasBOM(in []byte) bool {
	return bytes.HasPrefix(in, UTF8_BOM)
}

func stripBOM(in []byte) []byte {
	return bytes.TrimPrefix(in, UTF8_BOM)
}

func main() {
	flag.Parse()
	defer func() {
		if err := recover(); err != nil {
			fmt.Fprintln(os.Stderr, "error:", err)
			os.Exit(1)
		}
	}()

	content, err := ioutil.ReadFile(flag.Arg(0))
	if err != nil {
		panic(err)
	}

	err = ioutil.WriteFile(flag.Arg(1), stripBOM(content), 0644)
	if err != nil {
		panic(err)
	}
}