列子一, 实现预定义的interface
简单写了一个类似ReadCloser的东西
其实库函数中有一个ioutil.NopCloser()
不过为了知道interface怎么用
package main
import (
"fmt"
"io"
"strings"
"io/ioutil"
)
type MyReader struct {
r io.Reader
}
func (r MyReader)Read(b []byte) ( int, error){
return r.r.Read(b)
}
func (r MyReader)Close() error{
return nil
}
func main(){
x:="abc"
var myreader io.ReadCloser=MyReader{strings.NewReader(x)}
b,e:=ioutil.ReadAll(myreader)
if(e!=nil){
fmt.Println(e)
return
}
fmt.Println(string(b))
}
例子二,自定义interface
package main
import "fmt"
type Animal interface {
Say()
}
type Dog struct{
Name string
}
type Cat struct {
Name string
}
func (dog *Dog)Say(){
fmt.Printf("%s say wang\n",dog.Name)
}
func (cat *Cat)Say(){
fmt.Printf("%s say miao\n",cat.Name)
}
func main(){
fmt.Println("hello")
animals:= []Animal{&Dog{"小黑"},&Cat{"小花"}}
for _,a:=range animals{
a.Say()
}
}