当前位置: 首页 > news >正文

网站建设平台方案东莞网站建设seo

网站建设平台方案,东莞网站建设seo,中国黑色网站模板,优秀设计工作室网站先思考一个问题,什么是方法,什么是函数? 方法是从属于某个结构体或者非结构体的。在func这个关键字和方法名中间加了一个特殊的接收器类型,这个接收器可以是结构体类型的或者是非结构体类型的。从属的结构体获取该方法。 函数则…

先思考一个问题,什么是方法,什么是函数?

方法是从属于某个结构体或者非结构体的。在func这个关键字和方法名中间加了一个特殊的接收器类型,这个接收器可以是结构体类型的或者是非结构体类型的。从属的结构体获取该方法。

函数则没有这种从属关系。

func (t Type) methodName(parameter list) {
}
type Teacher struct {name     stringsalary   intcurrency string
}// 在结构体类型上,创建一个方法并调用。
func (tea Teacher) testSalary() {fmt.Printf("Salary of %s is %d %s", tea.name, tea.salary, tea.currency)
}func testUpFun() {tea:= Teacher{name:     "malou",salary:   10666,currency: "元",}tea.testSalary()
}
相同的名字的方法可以定义在不同的类型上,而相同名字的函数是不允许的
// Rectangle 定义Rectangle结构体
type Rectangle struct {length intwidth  int
}// Circle 定义Circle 结构体
type Circle struct {radius float64
}func (rectangle Rectangle) Area() int {return rectangle.width * rectangle.length
}func (circle Circle) Area() float64 {return math.Pi * circle.radius * circle.radius
}func testArea() {r := Rectangle{width:  10,length: 20,}fmt.Printf("Area is %d\n", r.Area())c := Circle{radius: 12,}fmt.Printf("Area is %f\n", c.Area())
}
值接收器和指针接收器之间的区别在于,在指针接收器的方法内部的改变对于调用者是可见的,然而值接收器的情况不是这样的。
// Dog struct
type Dog struct {name stringage  int
}// 使用值接收器的方法
func (d Dog) changeDogName(newName string) {d.name = newName
}// 使用指针接收器的方法
func (d *Dog) changeAge(newAge int) {d.age = newAge
}func testPointerStruct() {d := Dog{name: "金mao",age:  22,}// 并没有改变实际的值,只是改变的变量的副本fmt.Printf("before change is %s\n", d.name)d.changeDogName("马犬")fmt.Printf("after change is %s\n", d.name)// 改变的是变量本身的值fmt.Printf("before change is %d\n", d.age)d.changeAge(11)fmt.Printf("after change is %d\n", d.age)
}
那什么时候使用指针接收器,什么时候使用值接收器?指针接收器可以使用在:对方法内部的接收器所做的改变应该对调用者可见时。当拷贝一个结构体的代价过于昂贵的时候,比如说结构体中有很多字段,如果方法内使用这个结构体做为值接收器需要拷贝整个结构体,这个代价十分昂贵,这种情况下使用指针接收器,结构体不会被拷贝,只会传递一个指针到方法的内部。在其他的所有情况,值接收器都可以被使用。在方法中使用值接收器 和 在函数中使用值参数:
type rectangle struct {width  intlength int
}
// 函数中的参数,值类型,只能传递一个值类型
func area(r rectangle) {fmt.Printf("Area Function result :%d\n", r.length*r.width)
}func (r rectangle) area() {fmt.Printf("Area Method result :%d\n", r.length*r.width)
}func testFunAndMethod() {r := rectangle{width:  10,length: 15,}area(r)r.area()p := &r// (*p).area(),go解释器会自动的解引用p.area()
}// 在方法中使用指针,和在函数中使用指针参数
func (r *rectangle) perimeter() {fmt.Printf("Area Method result is %d\n", r.width*r.length)
}func perimeter(r *rectangle) {fmt.Printf("Area Function result is %d\n", r.width*r.length)
}func testPointerStruct1() {r := rectangle{width:  12,length: 10,}p := &rperimeter(p)p.perimeter()// r.perimeter() 解释为 (&r).perimeter()  还有一种是(*p).name  相互解引用,从指针p->(*p),从值r到指针(&r)r.perimeter()
}

小结:

大多数方法都使用的是结构体从属,注意传递的是值传递还是指针传递。

http://www.tj-hxxt.cn/news/41745.html

相关文章:

  • 响应式网站开发现状免费推广引流app
  • 做动态网站必学百度热线电话
  • 搭建方案网站优化网
  • 2022年最新国际新闻seo技术交流论坛
  • 免费申请二级网站源码百度搜索引擎怎么弄
  • 自己做的网站链接到微信支付界面公司怎么做网络营销
  • 徐州吸引力网络科技有限公司长沙网站推广排名优化
  • 网站要做手机版怎么做百度关键词排名价格
  • 武汉建设招标投标信息网招聘seo专员
  • 网站包括哪些内容怎么去推广自己的网站
  • 学院宣传网站制作石家庄关键词排名首页
  • 网站建设培训班上海关键词优化外包
  • 怎样购买网站程序友情链接如何添加
  • 东莞市小程序定制开发丨网站建设seo顾问服务四川
  • js 网站怎么做中英文郑州网络推广平台
  • 微网站开发平台有哪些教程推广优化网站排名
  • 简历模板免费下载的网页网站怎么优化搜索
  • 协助别人做网站犯法么it教育培训机构
  • 黔东南网站开发gzklyy百度上怎么免费开店
  • 网站服务器管理维护seo优化与品牌官网定制
  • 上海做个网站多少钱精准大数据获客系统
  • 用asp.net做的网站有哪些优化软件seo排名
  • 网络科技有限公司简介范文重庆seo网站收录优化
  • 企业网站建设指标网店培训
  • 山西做网站的公司有哪些营销推广手段有什么
  • 网站 解析关键词挖掘站网
  • 做定制旅游最好的网站seo专业培训中心
  • 兰州网站的优化百度收录权重
  • 网页版qq在线seo网站推广方案策划书
  • 网页制作用什么工具站长工具seo综合查询可以访问