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

贵阳经开区建设管理局网站南京网站设计建设

贵阳经开区建设管理局网站,南京网站设计建设,企业官网首页设计,凉山州建设网站Go语言程序设计-第6章–方法 对象就是简单的一个值或者变量#xff0c;并且拥有其方法#xff0c;而方法是某种特定类型的函数。 6.1 方法的声明 方法的声明和普通函数的声明类似#xff0c;只是在函数名字前面多了一个参数。这个参数把这个方法绑定到这个参数对应的类型…Go语言程序设计-第6章–方法 对象就是简单的一个值或者变量并且拥有其方法而方法是某种特定类型的函数。 6.1 方法的声明 方法的声明和普通函数的声明类似只是在函数名字前面多了一个参数。这个参数把这个方法绑定到这个参数对应的类型上。 package geometryimport mathtype Point struct { X, Y float64 }// 普通函数 func Distince(p, q Point) float64 {return math.Hypot(q.X - p.X, q.Y - p.Y) }// Point 类型的方法 func (p Point)Distince(q Point) float64 {return math.Hypot(q.X - p.X, q.Y - p.Y) }附加的参数 p 称为方法的接收者。接收者不使用特殊名(比如 this 或者 self)。 表达式 p.Distance 称为选择子selector, 因为它为接受者 p 选择合适的 Distince 方法。 6.2 指针接收者的方法 由于主调函数会复制每个实参变量如果函数需要更新一个变量或者如果一个实参太大而我们希望避免复制整个实参。我们必须使用指针来传递变量的地址。 func (p *Point) ScaleBy(factor float64) {p.X * factor;p.Y * factor; }命令类型Point和指向他们的指针* Point是唯一可以出现在接收者声明处的类型。 在真实的程序中如果 Point 的任何一个方法使用指针接收者那么所有的 Point 方法都应该使用指针接收者。 如果方法要求一个 *Point 接收者我们可以使用简写 p.ScaleBy(2)编译器会对变量进行 p 的隐私转换。只有变量才允许这么做包括结构体字段像 p.X 和数组或者 slice 元素比如 perim[0]。 Point(1,2).ScaleBy(2) // 编译错误不能获得 Poing 类型字面量的地址 如果实参接收者是 * Point 类型以 Point.Distance 方式调用Point类型的方法是合法的。编译器自动插入一个隐式的 * 操作符。 p : Point{1, 2} pptr : ppptr.Distance(q) (*pptr).Distance(q)nil 是一个合法的接收者 // IntList 是整形链表 // * IntList 的类型 nil 代表空列表 type IntList struct {Value intTail *IntList }// Sum 返回表元素的总和 func (list *IntList) Sum() int {if list nil {return 0}return list.Value list.Tail.Sum() }6.3 通过结构体内嵌组成类型 import image/colortype Point struct{X, Y float 64}type ColoredPoint struct {PointColor color.RGBA }var cp ColoredPoint cp.X 1能够通过类型为 ColoredPoint 的接收者调用内嵌类型 Point 的方法。 red : color.RGBA{255, 0, 0, 255} blue : color.RGBA{0, 0, 255, 255} var p ColoredPoint{Point{1, 1}, red} var q ColoredPoint{Point{5, 4}, blue} p.ScaleBy(2) p.Distnace(q.Point)Point 的方法都被纳入到 ColorPoint 类型中。 在 go 语言Point 类型不是 ColoredPoint 类型的基类。 ColoredPoint 包含一个Point并且它有两个另外的方法 Distance 和 ScaleBy 来自 Point。如果考虑具体实现实际上内嵌的字段会告诉编译器生成额外的包装方法来调用 Point 声明的方法这相当于以下代码。 func (p ColoredPoint) Distance(q Point) float64 {return p.Point.Distance(q) }func (p* ColoredPoint) ScaleBy(factor float64) {p.Point.ScaleBy(factor) }匿名字段类型可以是指向命名类型的指针这个时候字段和方法间接地来自所指向的对象。 结构体类型可以拥有多个匿名字段。声明 ColoredPoint: type ColoredPoint struct {Pointcolor.RGBA }那么这个类的值可以拥有 Point 所有的方法和 RGBA 所有的方法以及任何其他直接在 ColoredPoint 类型中声明的方法。当编译器处理选择子比如 p.ScaleBy的时候首先先查找直接声明的方法 ScaleBy, 之后在从来自 ColoredPoint 的内嵌字段的方法进行查找这里的方法经过一次提升最后从 Point 和 RGBA 中内嵌的方法中进行查找这里的方法经过2次提升。 如果同一个级别有两个同名的函数提升则编译器会报错。如Point 和 color.RGBA 都有 Scaleby 函数。 6.4 方法变量与表达式 p.Dsitance 可以赋予一个方法变量他是一个函数把方法Point.Distance绑定到一个接收者 p 上。函数只需要提供实参而不需要提供接收者就能够调用。 p : Point{1, 2} q : Point{4, 6} distanceFromP : p.Distance // 方法变量 fmt.Println(distanceFromP(q))与方法变量相关的是方法表达式。在方法表达式写成 T.f 或者(*T).f其中 T 是类型是一种函数变量把原来方法的接收者替换成函数的第一个形参因此它可以像平常的安徽省南一样调用。 package mainimport (fmtmath )type Point struct{ X, Y float64 }func (p Point) Distance(q Point) float64 {return math.Hypot(q.X-p.X, q.Y-p.Y) }func (p *Point) ScaleBy(factor float64) {p.X * factorp.Y * factor }func main() {p : Point{1, 2}q : Point{4, 6}distance : Point.Distance // 方法表达式fmt.Println(distance(p, q))scale : (*Point).ScaleByscale(p, 2)fmt.Println(p) //{2, 4}fmt.Printf(%T\n, scale) // func(*Point, float64) }6.5 示例位向量 6.6 封装 type IntSet struct {words []uint64 }可以定义为 type IntSet []uint64使用时把 s.words 换成 *s。 尽管这个版本的 IntSet 和之前的基本相同但是它允许其他包内的方法读取和改变这个 slice。换句话说表达式 *s 可以在其他包内使用s.words 只能在定义 IntSet 的包内使用。 另一个结论是Go语言封装的单元是包而不是类型。无论是函数内的代码还是方法内的代码结构体类型内的字段对于同一个包中的所有代码都是可见的。 封装提供了三个优点。 第一因为使用方不能直接修改对象的变量所以不需要更多的语句来检查变量的值。 第二隐藏实现细节可以防止使用方依赖的属性发生改变使得设计者可以更加灵活地改变 API 的实现而不破坏兼容性。 第三防止使用者肆意地改变对象内部的变量。
http://www.tj-hxxt.cn/news/143519.html

相关文章:

  • 做网站路径手机模板网站下载
  • 做网站后端的全部步骤asp代码如何修改asp网站网页域名名称
  • 网站开发工具评价视频网站用户增长怎么做
  • 企业网站改版的好处怎么做网站设
  • 大型企业的微网站谁做wordpress 右侧边栏
  • 网站维护简单吗公司地址变更
  • 台州市城市建设投资公司网站本溪网站建设
  • 空间网网站seo优化培训
  • 致力于邯郸网站建设制作服务_使众多客户将网站转化为网络市场营销.中国建设工程造价管理协会网站简称
  • 信阳企业网站建设建站快车来电
  • 手机上网网站建设建筑导航网站
  • 搜网站首页不见了seo安卓开发软件手机版
  • 服装网站模板山西网站设计
  • 海外社交网站开发在与客户谈网页广告时如何让客户相信网站流量
  • 北京pc端网站开发什邡建设局网站
  • 站点推广策略包括怎样建设购物网站
  • 做php网站教程视频wordpress图片水印
  • 我要发布文章到网站上推广 哪些网站最好网站建设和源代码问题
  • 上海网站建设改版做钢材的做什么网站效果好
  • 百度营销登录邢台视频优化
  • 想做个网站 怎么做的co域名哪些网站
  • 建电商网站要多少钱网页加速器安卓
  • 网站集群建设ppt嘉定网站建设网页制作
  • 做招工的网站排名一般注册公司要多少钱
  • 网站建设技术标书wordpress评论不显示头像
  • cod建站系统电脑单页网站建设
  • 深圳南山建设局官方网站网站规划作品
  • 怎样自己创建一个网站互联网服务行业
  • dw做网站链接数据库梁志天设计公司简介
  • 汕头企业制作网站购物网站的前台用什么做