go interface 使用
golang interface 使用样例
package main
/*
类型通过实现那些方法来实现接口。 没有显式声明的必要;所以也就没有关键字“implements“。
隐式接口解藕了实现接口的包和定义接口的包:互不依赖。
因此,也就无需在每一个实现上增加新的接口名称,这样同时也鼓励了明确的接口定义。
*/
import (
"fmt"
"strconv"
"testing"
)
type Phone interface {
call()
}
type Nokia struct {
}
type IPhone struct {
}
func (nokia Nokia) call() {
fmt.Println("hi, nokia")
}
func (iphone IPhone) call() {
fmt.Println("hi, iphone")
}
func TestInterface(t *testing.T) {
var phone Phone
phone = new(Nokia)
phone.call()
phone = new(IPhone)
phone.call()
}
/*
一个普遍存在的接口是 fmt 包中定义的 Stringer。
type Stringer interface {
String() string
}
Stringer 是一个可以用字符串描述自己的类型。`fmt`包 (还有许多其他包)使用这个来进行输出。
*/
type Person struct {
Name string
Age int
}
func (p Person) String() string {
return fmt.Sprintf("%v (%v years)", p.Name, p.Age)
}
func TestStringerInterface(t *testing.T) {
a := Person{"Arthur Dent", 42}
z := Person{"Zaphod Beeblebrox", 9001}
fmt.Println(a, z)
}
/* IPAddr 类型实现 fmt.Stringer 以便用点分格式输出地址 */
type IPAddr [4]byte
func (ipAddr IPAddr) String() string {
var s string
for _, v := range ipAddr {
s += strconv.Itoa(int(v)) + "."
}
s = s[0 : len(s)-1]
return s
}
func TestIPToStr(t *testing.T) {
addrs := map[string]IPAddr{
"loopback": {127, 0, 0, 1},
"googleDNS": {8, 8, 8, 8},
"nil": {},
}
for n, a := range addrs {
fmt.Printf("%v: %v\n", n, a)
}
}
测试
执行测试代码 go test -v interface_test.go
可以查看执行结果
go test 使用请看:go test 使用
golang 使用样例汇总:go test
你可能感兴趣的文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦