はじめに
GoのInterfaceの実装です。Interfaceを利用すると実装、テストが楽になるのでInterfaceを実装したサンプルを記載します。
実装
ディレクトリ構成
~/go/src/go_sample$ tree
.
├── domain
│ ├── service.go
│ └── user.go
├── go.mod
└── main.go
2 directories, 4 files
main.go
package main
import (
"fmt"
"go_sample/domain"
)
func main() {
user := domain.User{}
fmt.Println(user.Walk())
}
service.go
package main
type IUserService interface {
Talk() string
Walk() string
}
user.go
package domain
type User struct {
Name string
Age int
}
func (u User) Walk() string {
return "歩きます"
}
// func (u User) Talk() string {
// return "話します"
// }
→Talk()
はあえてコメントアウトしてます。
実行結果
~/go/src/go_sample$ go run main.go
歩きます
課題
Interfaceを定義していないので、実装漏れが出てきてしまいます。そこで、Interfaceを利用して実装します。
user.go
package domain
var _ IUserService = User{}
type User struct {
Name string
Age int
}
func (u User) Walk() string {
return "歩きます"
}
// func (u User) Talk() string {
// return "話します"
// }