code: func ReadlinesUTF16(reader io.Reader) (generator chan []byte) {
  	generator = make(chan []byte)
  	go func() {
  		var utf16Rune [2]byte
  		var r rune
  		var u [1]uint16
  
  		// closing generator
  		defer close(generator)
  
  		line := make([]byte, 0, 4096)
  		i := 0
  		for read, err := reader.Read(utf16Rune[:]); read == 2 && err == nil; {
  			u[0] = *(*uint16)(unsafe.Pointer(&utf16Rune[0]))
  			// Filter out UTF16 BOM
  			if u[0] == 0xfeff && i == 0 {
  				goto tail
  			}
  
  			r = utf16.Decode(u[:])[0]
  			if r == '\n' {
  				fullLine := make([]byte, len(line))
  				copy(fullLine, line)
  				fullLine = bytes.TrimRight(fullLine, "\r\n")
  				generator <- fullLine
  				line = make([]byte, 0, 4096)
  			} else {
  				line = append(line, byte(r))
  			}
  
  		tail:
  			read, err = reader.Read(utf16Rune[:])
  			i++
  
  		}
  	}()
  	return generator
  }
docs: // ReadlinesUTF16 : returns a channel of []byte lines trimmed. To be used with a reader containing UTF16 encoded runes