なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

Go言語で継承みたいなこと

最近Go言語でつくるインタプリタを読んでいる。ほとんど趣味だが、lexer/parser(字句解析/構文解析)->ast化(抽象構文木)->eval(評価)までの流れを辿れるためとてもおもしろい。

Go言語でつくるインタプリタ

Go言語でつくるインタプリタ

Go言語で継承

これは、Scalaでtrait作ってwith句で使えるようにしたり、RubyでModuleをincludeしてやるのに似ている。

簡単な例

package main

import (
    "fmt"
)

// 共通処理を入れたクラス、みたいなもの
type CommonUtil struct {}
// 名前を入れたらあいさつする関数
func (*CommonUtil) SayHello(name string) {
    fmt.Printf("SayHello! %s", name)
}

// 実際のモジュール
type ActualModule struct {
    *CommonUtil  // ここでEmbeddingする
    Name string
}

func main() {
    fmt.Println("Hello, Wandbox!")
    am := ActualModule{&CommonUtil{}, "hiroyuki"}
    // SayHelloを呼び出せる
    am.SayHello(am.Name)
}