首页 > 其他分享 >golang 类型断言和 var _ T = expression 写法

golang 类型断言和 var _ T = expression 写法

时间:2024-05-21 22:54:19浏览次数:22  
标签:ok 断言 IRouter value golang 类型 var expression

 

类型断言(Type Assertion)在Go语言中用于检查一个接口值的具体类型,并从中获取该类型的值。

它允许你声明并访问接口变量内部存储的非接口类型的值。有两种主要的类型断言形式:

  value, ok := i.(T):这种形式会检查接口 i 是否持有类型 T 的值。如果成功,value 将是 T 类型的值,ok 会被设置为 true;如果失败,value 会得到零值,而 ok 为 false。

  value := i.(T):这种形式没有 ok 检查,如果 i 不是 T 类型,程序会在运行时 panic。

 

var _ T = expression 这种写法是Go语言中的一个常见模式,用于类型检查。

这里的下划线 _ 是一个忽略变量的占位符,它不会实际存储表达式的值。

这种写法的主要目的是确认右边的表达式的结果可以赋值给左边的类型 T。

如果不能赋值,编译器会报错,从而帮助开发者在编译时发现类型不匹配的问题。

这是一种静态类型检查的技巧,常用于确保某个值或某个函数返回值符合预期的类型。


routergroup.go

var _ IRouter = &RouterGroup{}

类型断言,将&RouterGroup{}断言为IRouter接口类型。这通常用于验证RouterGroup类型是否实现了IRouter接口。

 

gin.go

var _ IRouter = &Engine{}

类型断言,将&Engine{}类型断言为IRouter接口类型。这通常用于验证Engine类型是否实现了IRouter接口。

 

Tool:代码差异比较器HTML查错器Llama3在线SQL格式化

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

标签:ok,断言,IRouter,value,golang,类型,var,expression
From: https://www.cnblogs.com/farwish/p/18205109

相关文章

  • golang select 和外层的 for 搭配
     select语句通常与for循环搭配使用,但并不是必须的。在某些情况下,select可能会直接放在一个独立的goroutine中,没有外层的for循环。这通常发生在你知道只会有一次或有限次操作的情况下。例如,你可能有一个简单的goroutine,它等待一个特定的channel信号,然后执行一次操作:package......
  • mysql: Syntax error or access violation: 1055 Expression #2 of SELECT (错误解决办
    Mysql报错:SQLSTATE[42000]:Syntaxerrororaccessviolation:1055Expression#2ofSELECTlistisnotinGROUPBYclauseandcontainsnonaggregatedcolumn'seo.ryc_combo_class_cate_list_113.fid'whichisnotfunctionallydependentoncolumnsin......
  • EasyUEFI、Bootice、Bcdedit和EfiVarCLI都是用于管理计算机启动项和UEFI设置的工具,但
    EasyUEFI、Bootice、Bcdedit和EfiVarCLI都是用于管理计算机启动项和UEFI设置的工具,但它们在功能和用途上有一些区别:EasyUEFI:EasyUEFI是一个用户友好的图形界面工具,主要用于管理UEFI引导项,在Windows操作系统下操作更加方便。EasyUEFI提供了添加、删除、编辑UEFI引导项的......
  • vscode 无法调试 golang testify suite 中的单个 test 的解决办法
    目录问题描述网上的讨论最终的解决办法问题描述对于如下这样简单的测试文件:packagemain//Basicimportsimport( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite")varassertObj*assert.Assertions//Definethesuite,......
  • 连接池设计与实现一——以Golang Http1.1为例
    0.前言连接池是一个非常重要的开发思想,如httpclient会构建连接池复用底层TCP连接,使用database/sql的使用也会有连接池的配置。那么代码底层是如何实现连接池的呢?这篇文档将以Golang语言为基础,分析http1.1连接池底层实现★注意:我们仅仅关注连接池设计思想、以及关键源码解读,......
  • Linux/Golang/glibC系统调用
    Linux/Golang/glibC系统调用本文主要通过分析Linux环境下Golang的系统调用,以此阐明整个流程有时候涉略过多,反而遭到质疑~,写点文章证明自己实力也好Golang系统调用找个函数来分析https://pkg.go.dev/os/exec#Cmd.Wait源码文件在src/os目录下的:exec.go->exec_unix.go->......
  • Golang初学:获取程序内存使用情况,std runtime
    goversiongo1.22.1windows/amd64Windows11+amd64x86_64x86_64GNU/Linux--- 序章本文介绍golang程序占用内存的监控:使用stdruntime的ReadMemStats函数。 ReadMemStats函数https://pkg.go.dev/[email protected]//函数funcReadMemStats(m*MemStats......
  • CMake Professtional-2 Variables
    set(varNamevalue...[PARENT_SCOPE])cmake中所有的值都是string,如果同时添加多个值,会自动添加;set(myVarabc)#myVar="a;b;c"set(myVara;b;c)#myVar="a;b;c"set(myVar"abc")#myVar="abc"set(myVarab;c)#myVar=&q......
  • Hyperscan is generally vulnerable to regular expression denial of service (ReDoS
    FunctionsforSearchinginStrings|ClickHouseDocshttps://clickhouse.com/docs/en/sql-reference/functions/string-search-functionsHyperscanisgenerallyvulnerabletoregularexpressiondenialofservice(ReDoS)attacks(e.g.see(here)[https://www.usen......
  • golang开发
    项目目录结构democonfigconfig.goconfconfig.yamllogmain.go代码config.gopackageconfigimport("fmt""github.com/toolkits/pkg/file""github.com/toolkits/pkg/logger""os")typeCon......