Golang では named type に対して method を生やすことができる。 これが Java などでクラスがあると便利だった機能の代替として使える。
たとえば Java でこんなコードがあった場合:
public class Person {
private final String firstName;
private final String lastName;
public Person(String firstName, String lastName){
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName(){ return firstName; }
public String getLastName(){ return lastName; }
public String getFullName(){ return firstName + " " + lastName; }
}
class Main {
public static void main(String[] args){
Person person = new Person("Taro", "Yamada");
System.out.println( person.getFullName() );
}
}
これを golang で書き直すと:
package main
import "fmt"
type Person struct {
FirstName string
LastName string
}
func (p *Person) fullName() string {
return fmt.Sprintf("%s %s", p.FirstName, p.LastName)
}
func main() {
person := Person{
FirstName: "Taro",
LastName: "Yamada",
}
fmt.Println(person.fullName())
}
このように、名前付き type である Persion 構造体に fullName() という function を生やすことができる。 なんて便利なんだ。