利用Golang怎么对接口进行判断

  介绍

利用Golang怎么对接口进行判断?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

<强> 1。利用编译来判断Golang接口是否实现

看了一个底层通用链接池的库,有这么一行代码:

var _池=new (WeightedRoundRobin)

需要解释的是:池是一个接口类型。

type  Pooler  interface  {//,才能……   }

刚开始看是疑惑的,为什么新了之后是要抛弃调?

后面发现这个是为了验证某某接口是否被实现了?

多看了一些代码后发现很多地方有类似这样的写法。

至此得到到了。

解释:如果说次接口没有被实现,那么一方面ide会有红横线出现,另一方面在编译的时候会出现报的错。两方面的提示来保证写底层代码的接口是有被实现的。

<强> 2。延伸出的新建和的区别

和小伙伴讨论期间,跑出了这么一个问题:“可以使用去测试的方式,去_test.go文件中定义一个接口,来判断就好了。上文判断会存在浪费内存的情况”

这边两个点:

<强> 1。去测试的方式肯定是可行的。

但是并没法保证程序员会真的记住去执行进行检测(非强制必须走的流程)。但是直接通过前文方式,是会在编译的时候抛错的,这个是必须走的流程,所以更推荐前文的方式。

<强> 2。新占内存?

新:申请了内存,但是不会将内存初始化,只会将内存置零,返回一个指针。

:申请了内存,返回已初始化的结构体的零值。

利用Golang怎么对接口进行判断

回到正文,虽然申请了内存,但占的内存其实并不多,并且在初始化后的一次gc中便会回收。所以还好。

同时也不存在效率问题,编译型语言,你懂的。

同时验证一个新的和取地址和做出的区别的代码:

func 主要(),{   ,a1 :=,新(int [])   ,a2:=,, int [] {}   ,a3:=, (int [], 0)   ,fmt.Println (a1, a2, a3, a1==a1)   }

输出:

,[],[][]真正的

附录:Golang新和使的区别

扩展

对于内存的占用,今天看到一种写法。

var _测试=(*测试)(nil)

这样写和新的的区别在于:新是编译的时候检查,这样写是运行的时候检查

<强>补充:Golang接口实现多态

我就废话不多说了,大家还是直接看代码吧~

package  main    import  (   “才能fmt"   )   ,   func  main (), {   user 才能;:=,,用户{名称:,“Chris"}   user.ISubUser 才能=,,NormalUser {}   user.sayHi才能()   user.ISubUser 才能=,,ArtisticUser {}   user.sayHi才能()   }   ,   type  ISubUser  interface  {   sayType才能()   }   ,   type  User  struct  {   name 才能;字符串   ISubUser才能   }   ,   func  (u  *用户),sayHi (), {   u.sayName才能()   u.sayType才能()   }   ,   func  (u  *用户),sayName (), {   fmt.Printf才能(“小姐:am  % s干净,,u.name)   }   ,   type  NormalUser  struct  {   ,   }   ,   func  (n  * NormalUser), sayType (), {   fmt.Println才能(“小姐:am  a  normal 用户!”)   }   ,   type  ArtisticUser  struct  {   ,   }   ,   func  (a  * ArtisticUser), sayType (), {   fmt.Println才能(“小姐:am  an  artistic 用户!”)   }//RUN 之后输出:   小姐:am  Chris.I  am  a  normal 用户。   小姐:am  Chris.I  am  a  artistic 用户。//重用了sayName和sayHi方法,sayType方法可以多态来实现。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

利用Golang怎么对接口进行判断