gotil.go
func LineReaderFrom(path string) (<-chan string, error) {
	return lineReader(func() (io.Reader, func(), error) {
		if !FileExists(path) {
			return nil, nil, nil
		}
		f, err := os.Open(path)
		if err != nil {
			return nil, nil, err
		}
		return f, func() { f.Close() }, nil
	})
}
func LineReaderFrom(path string) (<-chan string, error) {
	return lineReader(func() (io.Reader, func(), error) {
		if !FileExists(path) {
			return nil, nil, nil
		}
		f, err := os.Open(path)
		if err != nil {
			return nil, nil, err
		}
		return f, func() { f.Close() }, nil
	})
}
// LineReaderFrom returns a channel that reads the contents of a file
// line-by-line.