在 Go 語言中,一個 struct 實作了某個介面里的所有方法,就叫做這個 struct 實作了該介面,
下面寫一個 Demo 實作一下,先寫一個 Study interface{},里面需要實作 4 個方法 Listen、Speak、Read、Write,然后再寫一個 study struct{},去全部實作里面的方法,然后分享一下代碼心得,
代碼示例
// main.go
package main
import (
"demo/study"
"fmt"
)
func main() {
name := "Tom"
s, err := study.New(name)
if err != nil {
fmt.Println(err)
}
fmt.Println(s.Listen("english"))
fmt.Println(s.Speak("english"))
fmt.Println(s.Read("english"))
fmt.Println(s.Write("english"))
}
// 輸出
Tom 聽 english
Tom 說 english
Tom 讀 english
Tom 寫 english
// study.go
package study
import "github.com/pkg/errors"
var _ Study = (*study)(nil)
type Study interface {
Listen(msg string) string
Speak(msg string) string
Read(msg string) string
Write(msg string) string
}
type study struct {
Name string
}
func (s *study) Listen(msg string) string {
return s.Name + " 聽 " + msg
}
func (s *study) Speak(msg string) string {
return s.Name + " 說 " + msg
}
func (s *study) Read(msg string) string {
return s.Name + " 讀 " + msg
}
func (s *study) Write(msg string) string {
return s.Name + " 寫 " + msg
}
func New(name string) (Study, error) {
if name == "" {
return nil, errors.New("name required")
}
return &study{
Name: name,
}, nil
}
代碼解釋
一、
var _ Study = (*study)(nil)
要求 *study 去實作 Study,若 Study 介面被更改或未全部實作時,在編譯時就會報錯,
二、
type study struct {
Name string
}
之所以定義為私有的結構體,是因為不想在其他地方被使用,比如后面將 Name 改成 UserName 只需要在本包內修改即可,
三、
func New(name string) (Study, error) {
if name == "" {
return nil, errors.New("name required")
}
return &study{
Name: name,
}, nil
}
在其他地方呼叫 New() 使用 Study 包時,僅對外暴露了 4 個方法,別人只管呼叫就好了,內部實作別人無需關心,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/241194.html
標籤:Go
下一篇:[系列] Go - 學習 grpc.Dial(target string, opts …DialOption) 的寫法
