首页 > 其他分享 >golang interface guard 技术(接口守护)

golang interface guard 技术(接口守护)

时间:2024-06-20 23:09:38浏览次数:27  
标签:app caddy 接口 golang guard error interface App

 

Go代码的接口守卫(interface guards)技术,通常用于库的开发,以确保类型符合预期的接口。

 

下面示例的 Interface guards 确保 App 类型实现了caddy.App、caddy.Provisioner 和 caddy.Validator 接口。

具体来说,它通过将 (*App)(nil) 转换为这三个接口的类型,并将其赋值给匿名变量 _,来静默地检查App类型是否满足这些接口的定义。

如果 App 类型没有实现任何一个接口,编译器会报错。

 

./caddy.go

// App is a thing that Caddy runs.
type App interface {
    Start() error
    Stop() error
}

./modules.go

type Provisioner interface {
    Provision(Context) error
}

type Validator interface {
    Validate() error
}

./modules/caddyhttp/app.go

type App struct {
    
}

// Start runs the app. It finishes automatic HTTPS if enabled,
// including management of certificates.
func (app *App) Start() error {
    // xxx
}

// Stop gracefully shuts down the HTTP server.
func (app *App) Stop() error {
    // xxx
}

// Provision sets up the app.
func (app *App) Provision(ctx caddy.Context) error {
    // xxx
}

// Validate ensures the app's configuration is valid.
func (app *App) Validate() error {
    // xxx
}

// Interface guards
var (
    _ caddy.App         = (*App)(nil)
    _ caddy.Provisioner = (*App)(nil)
    _ caddy.Validator   = (*App)(nil)
)

 

Link:https://www.cnblogs.com/farwish/p/18259660

标签:app,caddy,接口,golang,guard,error,interface,App
From: https://www.cnblogs.com/farwish/p/18259660

相关文章

  • golang 爬虫修炼02 ---协程、互斥锁、读写锁、waitgroup
    协程程序:为了完成特定任务,使用某种语言编写的一组指令的集合,是一段静态的代码进程:是程序的一次执行过程。正在运行的一个程序,进程作为资源分配的单位,在内存中会为每个进程分配不同的内存区域。进程是动态的,有产生、存在、消亡的过程线程:进程可进一步细分为线程,是一个程序......
  • Golang - 90天从新手到大师
    开篇最近有很多小伙伴都在寻找go语言完整学习资料,我整理了一些Golang方面的知识,方便大家学习。内容从最基础的入门到项目设计,希望帮助更多想了解和学习Go语言的伙伴。因为是持续创作,所以也会持续更新。有些章节目录还没有内容,敬请期待。。创作不易,感谢大家的支持。如果看后......
  • 【golang学习之旅】Go程序快速开始 & Go程序开发的基本注意事项
    系列文章【golang学习之旅】使用VScode安装配置Go开发环境【golang学习之旅】报错:adeclaredbutnotused【golang学习之旅】Go的基本数据类型【golang学习之旅】深入理解字符串string数据类型【golang学习之旅】gomodtidy【golang学习之旅】记录一次paniccase......
  • golang json库 忽略 omitempty
    json库的obmitempty介绍众所周知,golang的json库有个omitempty的tag,有了它,这个json序列化的时候,如果这个字段是零值,则会忽略此字段的序列化,导致json字符串中没有对应的字符串。这对于某些人是困惑的,一般默认是没有omitempty这个tag的,但是。但是来了,但是protobuf生成的pb.......
  • Oracle DataGuard异常处理【ORA-01119 ORA-17502 ORA-15041】→【ORA-01111 ORA-01110
    收到用户反馈DG上查不到最近一天的数据,怀疑同步有问题一、检查备库同步情况两个节点都未看到MRP0进程SQL>selectprocess,status,thread#,sequence#fromv$managed_standby;PROCESS STATUS THREAD# SEQUENCE#---------------------------------------......
  • Golang与设计模式
    单例模式因为之前研究Java比较多,所以当我试着使用go来实现一些设计模式的时候,首先想到的就是照搬Java中的思路,后面对go了解加深之后又增加了一些新的思路。在Java中实现的单例模式的思路有很多,但是比较好的两个思路是利用类加载机制生成单例对象,check-lock-check机制避免并发问......
  • Golang语言基础超详细教程&备忘录
    作者的话:这篇文章是之前刚从Java转到Go,学习时编写的,力求全面且详细。本文是基础内容,适合初学者,也适合老手用来当备忘录。和网上其他文档不同的是,我陆陆续续将很多小的知识点也补进来了,后续也会继续补充。这篇文章开始是我写在本机,然后又改写到自己的个人博客,现在有誊写到CSDN,......
  • golang中用chan实现迭代器
    实现代码如下:packagemainimport( "log" "time")/* 两种迭代器的实现*///采用index的方式实现(非线程安全)typeListStructstruct{ indexint data[]int}func(sl*ListStruct)Next()int{ d:=sl.data[sl.index] sl.index+=1 returnd}func(......
  • rust 和 golang 的特点及适用场景
     Rust特点及适用场景:内存安全:Rust通过所有权系统和生命周期管理在编译时保证内存安全,有效防止了空指针异常、数据竞争、悬挂指针等问题,非常适合开发高性能系统软件和底层库。并发模型:Rust提供了强大的并发工具,如async/await和通道(channel),支持高效且安全......
  • 安装、配置和使用AdGuard Home来实现家庭网络的广告和隐私保护;进一步深入学习和掌握Ad
    AdGuardHome是一个功能强大的网络广告拦截和隐私保护工具,它的底层原理涉及到多个方面的技术和工作原理。以下是关于AdGuardHome底层原理的概要:DNS拦截与过滤:AdGuardHome通过拦截DNS查询请求并返回虚假的响应来实现广告和恶意网站的过滤。它会拦截客户端设备发送的......