安全RCE之未授权访问分析(4)
2023-05-02 来源:飞速影视
go语言前置知识
我会简要介绍一下漏洞涉及的相关语言前置知识,这样才能够更深入的理解该漏洞,并将相关知识点串联起来,达到举一反三。
函数、方法和接口
在golang中函数和方法的定义是不同的,看下面一段代码
package main//Person接口type Person interface{ isAdult() bool}//Boy结构体type Boy struct { Name string Age int}//函数func NewBoy(name string, age int) *Boy { return &Boy{ Name: name, Age: age, }}//方法func (p *Boy) isAdult() bool { return p.Age > 18}func main() { //结构体调用 b := NewBoy("Star", 18) println(b.isAdult()) //将接口赋值b,使用接口调用 var p Person = b println(p.isAdult())//false}
其中NewBoy为函数,isAdult为方法。他们的区别是方法在func后面多了一个接收者参数,这个接受者可以是一个结构体或者接口,你可以把他当做某一个"类",而就是实现了该类的方法。
通过&取地址操作可以将一个结构体实例化,相当于new,可以看到在中函数封装了这种操作。在main函数中通过调用函数实例化Boy结构体,并调用了其方法。
关于接口的实现在Go语言中是隐式的。两个类型之间的实现关系不需要在代码中显式地表示出来。Go语言中没有类似于implements 的关键字。 Go编译器将自动在需要的时候检查两个类型之间的实现关系。**在类型中添加与接口签名一致的方法就可以实现该方法。**如的参数和返回值均与接口Person中的方法一致。所以在main函数中可以直接将定义的接口p赋值为实例结构体b。并进行调用。
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)
www.fs94.org-飞速影视 粤ICP备74369512号