После того, как вы разделите имя и фамилию, в значениях появятся лишние пробелы, поэтому я добавил strings.TrimSpace и ниже, код работает, а также вам не нужно инициализировать sli с фиксированной длиной, добавление автоматически увеличит размер фрагмента.
package main
import (
"fmt"
"bufio"
"os"
"strings"
"io/ioutil"
)
type person struct {
fName [20]byte
lName [20]byte
}
func main(){
reader := bufio.NewReader(os.Stdin)
fmt.Printf("Enter Name ")
fname, _ := reader.ReadString('\n')
fname = strings.Replace(fname, "\n", "", -1)
fname = strings.Replace(fname, "\r", "", -1)
readFile, err := ioutil.ReadFile(fname)
if err != nil {
panic(err)
}
s := string(readFile)
fileTextLines := strings.Split(s, "\n")
sli := []person{}
for _, eachline := range fileTextLines {
res1 := strings.Split( eachline, " ")
var fname [20]byte
copy( fname[:], []byte(strings.TrimSpace(res1[0])))
fmt.Println(string(fname[:]))
var lname [20]byte
copy( lname[:], []byte(strings.TrimSpace(res1[1])) )
fmt.Println(string(lname[:]))
p := person{fname ,lname}
sli = append(sli,p)
}
// print the slice
for _,object := range sli {
fmt.Printf("First Name: %s Last Name: %s\n", string(object.fName[:]), string(object.lName[:]))
}
}
Только что выяснилось, что лишним с пробелом является возврат каретки "\ r" , Если вы используете windows платформу, вы должны использовать строку ниже, чтобы разделить текст новой строкой
strings.Split(strings.Replace(windows, "\r\n", "\n", -1), "\n")