package main
import (
"bufio"
"fmt"
"log"
"os"
"strings"
)
type Profile struct {
Name string
Email string
Phone string
Occupation string
Language [ ] string
Hobby [ ] string
Your_name string
Your_gender string
}
type MyMessage interface {
ShowMessage( ) string
}
func ( p * Profile) SetProfile( arr map[ string] string) {
for k, v := range arr {
p.k = v // このメンバ変数を動的に変えたい
}
}
func ( p * Profile) ShowMessage( ) string {
return fmt.Sprintf ( "Name: %s \n Language: %s" , p.Name ,
strings.Join ( p.Language , ", " ) )
}
func main( ) {
defer func( ) {
if x := recover( ) ; x != nil {
}
} ( )
me := & Profile{
Name: "John Lennon" ,
Email: "foobar@gmail.com" ,
Phone: "+81-90-0000-0000" ,
Occupation: "Programmer/System Engineer" ,
Language: [ ] string{ "Japanese" , "English" , "Spanish" } ,
Hobby: [ ] string{ "Photography" , "Traveling" } ,
}
you := make( map[ string] string)
scanner := bufio.NewScanner ( os.Stdin )
fmt.Println ( "Would you please let me know your profile?" )
fmt.Print ( "Your name: " )
scanner.Scan ( )
you[ "Your_name" ] = scanner.Text ( )
fmt.Print ( "Your gender: " )
scanner.Scan ( )
you[ "Your_gender" ] = scanner.Text ( )
if err := scanner.Err ( ) ; err != nil {
fmt.Fprintln ( os.Stderr , "Read error: " , err)
}
me.setProfile ( you)
fmt.Println ( me.ShowMessage ( ) ) // My message to you.
panic( "panic" )
}
cGFja2FnZSBtYWluCgppbXBvcnQgKAoJImJ1ZmlvIgoJImZtdCIKCSJsb2ciCgkib3MiCgkic3RyaW5ncyIKKQoKdHlwZSBQcm9maWxlIHN0cnVjdCB7CglOYW1lICAgICAgIHN0cmluZwoJRW1haWwgICAgICBzdHJpbmcKCVBob25lICAgICAgc3RyaW5nCglPY2N1cGF0aW9uIHN0cmluZwoJTGFuZ3VhZ2UgICBbXXN0cmluZwoJSG9iYnkgICAgICBbXXN0cmluZwoJWW91cl9uYW1lIHN0cmluZwoJWW91cl9nZW5kZXIgc3RyaW5nCn0KCnR5cGUgTXlNZXNzYWdlIGludGVyZmFjZSB7CglTaG93TWVzc2FnZSgpIHN0cmluZwp9CgpmdW5jIChwICpQcm9maWxlKSBTZXRQcm9maWxlKGFyciBtYXBbc3RyaW5nXXN0cmluZykgewoJZm9yIGssIHYgOj0gcmFuZ2UgYXJyIHsKCQlwLmsgPSB2ICAvLyDjgZPjga7jg6Hjg7Pjg5DlpInmlbDjgpLli5XnmoTjgavlpInjgYjjgZ/jgYQKCX0KfQoKZnVuYyAocCAqUHJvZmlsZSkgU2hvd01lc3NhZ2UoKSBzdHJpbmcgewoJcmV0dXJuIGZtdC5TcHJpbnRmKCJOYW1lOiAlcyBcbkxhbmd1YWdlOiAlcyIsIHAuTmFtZSwKCQlzdHJpbmdzLkpvaW4ocC5MYW5ndWFnZSwgIiwgIikpCn0KCmZ1bmMgbWFpbigpIHsKCWRlZmVyIGZ1bmMoKSB7CgkJaWYgeCA6PSByZWNvdmVyKCk7IHggIT0gbmlsIHsKCQkJbG9nLlNldE91dHB1dChvcy5TdGRvdXQpCgkJCWxvZy5QcmludGxuKCJwYW5pYyEiKQoJCX0KCX0oKQoKCW1lIDo9ICZQcm9maWxlewoJCU5hbWU6ICAgICAgICJKb2huIExlbm5vbiIsCgkJRW1haWw6ICAgICAgImZvb2JhckBnbWFpbC5jb20iLAoJCVBob25lOiAgICAgICIrODEtOTAtMDAwMC0wMDAwIiwKCQlPY2N1cGF0aW9uOiAiUHJvZ3JhbW1lci9TeXN0ZW0gRW5naW5lZXIiLAoJCUxhbmd1YWdlOiBbXXN0cmluZ3siSmFwYW5lc2UiLCAiRW5nbGlzaCIgLCAiU3BhbmlzaCJ9LAoJCUhvYmJ5OiBbXXN0cmluZ3siUGhvdG9ncmFwaHkiLCAiVHJhdmVsaW5nIn0sCgl9Cgl5b3UgOj0gbWFrZShtYXBbc3RyaW5nXXN0cmluZykKCglzY2FubmVyIDo9IGJ1ZmlvLk5ld1NjYW5uZXIob3MuU3RkaW4pCglmbXQuUHJpbnRsbigiV291bGQgeW91IHBsZWFzZSBsZXQgbWUga25vdyB5b3VyIHByb2ZpbGU/IikKCWZtdC5QcmludCgiWW91ciBuYW1lOiAiKQoJc2Nhbm5lci5TY2FuKCkKCXlvdVsiWW91cl9uYW1lIl0gPSBzY2FubmVyLlRleHQoKQoJZm10LlByaW50KCJZb3VyIGdlbmRlcjogIikKCXNjYW5uZXIuU2NhbigpCgl5b3VbIllvdXJfZ2VuZGVyIl0gPSBzY2FubmVyLlRleHQoKQoJaWYgZXJyIDo9IHNjYW5uZXIuRXJyKCk7IGVyciAhPSBuaWwgewoJCWZtdC5GcHJpbnRsbihvcy5TdGRlcnIsICJSZWFkIGVycm9yOiAiLCBlcnIpCgl9CgoJbWUuc2V0UHJvZmlsZSh5b3UpCglmbXQuUHJpbnRsbihtZS5TaG93TWVzc2FnZSgpKSAvLyBNeSBtZXNzYWdlIHRvIHlvdS4KCXBhbmljKCJwYW5pYyIpCn0K