Home About
Golang

Golang, 名前付きタイプにメソッドを生やす

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 を生やすことができる。 なんて便利なんだ。

まとめ