GO学习第七天(duck typing、接口组合)

本文探讨了Go语言中的鸭子类型概念,分析了如何通过接口实现动态行为,并介绍了如何利用接口组合来构造更复杂的系统,最终展示了如何实现一个真正的GET请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

duck typing

  • 是不是真正的鸭子

接口组合

type Retriever interface {
	Get(url string) string
}

type Poster interface {
	Post(url string,
		form map[string]string) string
}

type session interface {
	Poster
	Retriever
}

func text(s session) string {
	s.Post("www", map[string]string{
		"contents": "dmt_csr",
	})
	return s.Get("www")
}

func main() {
	s := &mock.Retriever{"what"}
	fmt.Println(text(s))
}
package mock

type Retriever struct {
	Contents string
}

func (r *Retriever) Get(url string) string {
	return r.Contents
}

func (r *Retriever) Post(url string, form map[string]string) string {
	r.Contents = form["contents"]
	return "ok"
}

实现真正的get请求

import (
	"net/http"
	"net/http/httputil"
	"time"
)

type Retriever struct {
	UserAgent string
	TimeOut   time.Duration
}

func (r Retriever) Get(url string) string {
	resp, err := http.Get(url)
	if err != nil {
		panic(err)
	}

	res, err := httputil.DumpResponse(resp, true)

	resp.Body.Close()
	if err != nil {
		panic(err)
	}
	return string(res)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值