Go言語でCodeEvalのEmail Validation


関連 : Python2でCodeEvalのEmail Validation - brainstorm


net/mailパッケージにアドレスをパースする関数が用意されている

package main
 
import (
	"bufio"
	"flag"
	"fmt"
	"io"
	"net/mail"
	"os"
)
 
func isValidMailAddress(address string) bool {
	_, err := mail.ParseAddress(address)
	return err == nil
}
 
func main() {
	flag.Parse()
 
	read_file, _ := os.OpenFile(flag.Arg(0), os.O_RDONLY, 0600)
	defer read_file.Close()
	reader := bufio.NewReader(read_file)
 
	for {
		switch line, err := reader.ReadString('\n'); err {
		case nil:
			chopped := line[0 : len(line)-1]
			result := isValidMailAddress(chopped)
			fmt.Fprintln(os.Stdout, result)
 
		case io.EOF:
			os.Exit(0)
		default:
			fmt.Fprintln(os.Stderr, "error:", err)
			os.Exit(1)
 
		}
	}
}