package main
import (
"bufio"
"fmt"
"os"
"reflect"
"regexp"
"strings"
)
type Profile struct {
Mine MyProfile "My datas"
Yours YourProfile "Your datas"
}
type MyProfile struct {
Name string
Email string
Phone string
Occupation []string
Language []string
Hobby []string
}
type YourProfile struct {
Name string
Gender string
}
func (u *YourProfile) SetProfile(arr map[string]string) {
for k, v := range arr {
key := reflect.ValueOf(u).Elem().FieldByName(k)
if key.IsValid() {
key.SetString(v)
}
}
}
type Message interface {
ShowMessage() string
}
func (m *MyProfile) ShowMessage(arr map[string]string) string {
var u YourProfile
u.SetProfile(arr) // ★
return fmt.Sprintf("Hi, %s. \nName: %s \nLanguage: %s", u.Name, m.Name,
strings.Join(m.Language, ", "))
}
func ArrangeAnswer(ans string) string {
re := regexp.MustCompile(`(\s| )+`)
return strings.TrimSpace(re.ReplaceAllString(ans, " "))
}
func main() {
me := &MyProfile{
Name: "John Lennon",
Email: "foobar@gmail.com",
Phone: "+81-90-0000-0000",
Occupation: []string{"Programmer", "System Engineer"},
Language: []string{"Go", "Java", "Python", "PHP", "JavaScript", "C"},
}
you := make(map[string]string)
scanner := bufio.NewScanner(os.Stdin)
fmt.Println("Would you please let me know your profile?")
for {
fmt.Print("Your name: ")
scanner.Scan()
ans := ArrangeAnswer(scanner.Text())
re := regexp.MustCompile(`^[a-zA-Z ]+$`)
if re.MatchString(ans) {
you["Name"] = ans
break
} else {
fmt.Println("alphabet please.")
}
}
fmt.Print("Your gender: ")
scanner.Scan()
you["Gender"] = strings.ToLower(ArrangeAnswer(scanner.Text()))
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "Read error: ", err)
}
fmt.Println(me.ShowMessage(you))
}
cGFja2FnZSBtYWluCgppbXBvcnQgKAoJImJ1ZmlvIgoJImZtdCIKCSJvcyIKCSJyZWZsZWN0IgoJInJlZ2V4cCIKCSJzdHJpbmdzIgopCgp0eXBlIFByb2ZpbGUgc3RydWN0IHsKCU1pbmUgIE15UHJvZmlsZSAgICJNeSBkYXRhcyIKCVlvdXJzIFlvdXJQcm9maWxlICJZb3VyIGRhdGFzIgp9Cgp0eXBlIE15UHJvZmlsZSBzdHJ1Y3QgewoJTmFtZSAgICAgICBzdHJpbmcKCUVtYWlsICAgICAgc3RyaW5nCglQaG9uZSAgICAgIHN0cmluZwoJT2NjdXBhdGlvbiBbXXN0cmluZwoJTGFuZ3VhZ2UgICBbXXN0cmluZwoJSG9iYnkgICAgICBbXXN0cmluZwp9Cgp0eXBlIFlvdXJQcm9maWxlIHN0cnVjdCB7CglOYW1lICAgc3RyaW5nCglHZW5kZXIgc3RyaW5nCn0KCmZ1bmMgKHUgKllvdXJQcm9maWxlKSBTZXRQcm9maWxlKGFyciBtYXBbc3RyaW5nXXN0cmluZykgewoJZm9yIGssIHYgOj0gcmFuZ2UgYXJyIHsKCQlrZXkgOj0gcmVmbGVjdC5WYWx1ZU9mKHUpLkVsZW0oKS5GaWVsZEJ5TmFtZShrKQoJCWlmIGtleS5Jc1ZhbGlkKCkgewoJCQlrZXkuU2V0U3RyaW5nKHYpCgkJfQoJfQp9Cgp0eXBlIE1lc3NhZ2UgaW50ZXJmYWNlIHsKCVNob3dNZXNzYWdlKCkgc3RyaW5nCn0KCmZ1bmMgKG0gKk15UHJvZmlsZSkgU2hvd01lc3NhZ2UoYXJyIG1hcFtzdHJpbmddc3RyaW5nKSBzdHJpbmcgewoJdmFyIHUgWW91clByb2ZpbGUKCXUuU2V0UHJvZmlsZShhcnIpICAvLyDimIUKCXJldHVybiBmbXQuU3ByaW50ZigiSGksICVzLiBcbk5hbWU6ICVzIFxuTGFuZ3VhZ2U6ICVzIiwgdS5OYW1lLCBtLk5hbWUsCgkJc3RyaW5ncy5Kb2luKG0uTGFuZ3VhZ2UsICIsICIpKQp9CgpmdW5jIEFycmFuZ2VBbnN3ZXIoYW5zIHN0cmluZykgc3RyaW5nIHsKCXJlIDo9IHJlZ2V4cC5NdXN0Q29tcGlsZShgKFxzfOOAgCkrYCkKCXJldHVybiBzdHJpbmdzLlRyaW1TcGFjZShyZS5SZXBsYWNlQWxsU3RyaW5nKGFucywgIiAiKSkKfQoKZnVuYyBtYWluKCkgewoJbWUgOj0gJk15UHJvZmlsZXsKCQlOYW1lOiAgICAgICAiSm9obiBMZW5ub24iLAoJCUVtYWlsOiAgICAgICJmb29iYXJAZ21haWwuY29tIiwKCQlQaG9uZTogICAgICAiKzgxLTkwLTAwMDAtMDAwMCIsCgkJT2NjdXBhdGlvbjogW11zdHJpbmd7IlByb2dyYW1tZXIiLCAiU3lzdGVtIEVuZ2luZWVyIn0sCgkJTGFuZ3VhZ2U6IFtdc3RyaW5neyJHbyIsICJKYXZhIiwgIlB5dGhvbiIsICJQSFAiLCAiSmF2YVNjcmlwdCIsICJDIn0sCgl9Cgl5b3UgOj0gbWFrZShtYXBbc3RyaW5nXXN0cmluZykKCglzY2FubmVyIDo9IGJ1ZmlvLk5ld1NjYW5uZXIob3MuU3RkaW4pCglmbXQuUHJpbnRsbigiV291bGQgeW91IHBsZWFzZSBsZXQgbWUga25vdyB5b3VyIHByb2ZpbGU/IikKCWZvciB7CgkJZm10LlByaW50KCJZb3VyIG5hbWU6ICIpCgkJc2Nhbm5lci5TY2FuKCkKCQlhbnMgOj0gQXJyYW5nZUFuc3dlcihzY2FubmVyLlRleHQoKSkKCQlyZSA6PSByZWdleHAuTXVzdENvbXBpbGUoYF5bYS16QS1aIF0rJGApCgkJaWYgcmUuTWF0Y2hTdHJpbmcoYW5zKSB7CgkJCXlvdVsiTmFtZSJdID0gYW5zCgkJCWJyZWFrCgkJfSBlbHNlIHsKCQkJZm10LlByaW50bG4oImFscGhhYmV0IHBsZWFzZS4iKQoJCX0KCX0KCWZtdC5QcmludCgiWW91ciBnZW5kZXI6ICIpCglzY2FubmVyLlNjYW4oKQoJeW91WyJHZW5kZXIiXSA9IHN0cmluZ3MuVG9Mb3dlcihBcnJhbmdlQW5zd2VyKHNjYW5uZXIuVGV4dCgpKSkKCWlmIGVyciA6PSBzY2FubmVyLkVycigpOyBlcnIgIT0gbmlsIHsKCQlmbXQuRnByaW50bG4ob3MuU3RkZXJyLCAiUmVhZCBlcnJvcjogIiwgZXJyKQoJfQoKCglmbXQuUHJpbnRsbihtZS5TaG93TWVzc2FnZSh5b3UpKQp9Cg==