游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

golang2021面向对象(10)基于指针对象的方法

  当调用一个函数时,会对其每一个参数值进行拷贝,如果一个函数需要更新一个变量,或者函数的其中一个参数实在太大我们希望能够避免进行这种默认的拷贝,这种情况下我们就需要用到指针了。对应到我们这里用来更新接收器的对象的方法,当这个接受者变量本身比较大时,我们就可以用其指针而不是对象来声明方法,如下:
  func(pPoint)ScaleBy(factorfloat64){
  p。Xfactor
  p。Yfactor
  }
  这个方法的名字是(Point)。ScaleBy。这里的括号是必须的;没有括号的话这个表达式可能会被理解为(Point。ScaleBy)。
  在现实的程序里,一般会约定如果Point这个类有一个指针作为接收器的方法,那么所有Point的方法都必须有一个指针接收器,即使是那些并不需要这个指针接收器的函数。我们在这里打破了这个约定只是为了展示一下两种方法的异同而已。
  只有类型(Point)和指向他们的指针(Point),才可能是出现在接收器声明里的两种接收器。此外,为了避免歧义,在声明方法时,如果一个类型名本身是一个指针的话,是不允许其出现在接收器中的,比如下面这个例子:
  typePint
  func(P)f(){。。。}compileerror:invalidreceivertype
  想要调用指针类型方法(Point)。ScaleBy,只要提供一个Point类型的指针即可,像下面这样。
  r:Point{1,2}
  r。ScaleBy(2)
  fmt。Println(r){2,4}
  或者这样:
  p:Point{1,2}
  pptr:p
  pptr。ScaleBy(2)
  fmt。Println(p){2,4}
  或者这样:
  p:Point{1,2}
  (p)。ScaleBy(2)
  fmt。Println(p){2,4}
  不过后面两种方法有些笨拙。幸运的是,go语言本身在这种地方会帮到我们。如果接收器p是一个Point类型的变量,并且其方法需要一个Point指针作为接收器,我们可以用下面这种简短的写法:
  p。ScaleBy(2)
  编译器会隐式地帮我们用p去调用ScaleBy这个方法。这种简写方法只适用于变量,包括struct里的字段比如p。X,以及array和slice内的元素比如perim〔0〕。我们不能通过一个无法取到地址的接收器来调用指针方法,比如临时变量的内存地址就无法获取得到:
  Point{1,2}。ScaleBy(2)compileerror:canttakeaddressofPointliteral
  但是我们可以用一个Point这样的接收器来调用Point的方法,因为我们可以通过地址来找到这个变量,只要用解引用符号来取到该变量即可。编译器在这里也会给我们隐式地插入这个操作符,所以下面这两种写法等价的:
  pptr。Distance(q)
  (pptr)。Distance(q)
  这里的几个例子可能让你有些困惑,所以我们总结一下:在每一个合法的方法调用表达式中,也就是下面三种情况里的任意一种情况都是可以的:
  不论接收器的实际参数和其形式参数是相同,比如两者都是类型T或者都是类型T:
  Point{1,2}。Distance(q)Point
  pptr。ScaleBy(2)Point
  或者接收器实参是类型T,但接收器形参是类型T,这种情况下编译器会隐式地为我们取变量的地址:
  p。ScaleBy(2)implicit(p)
  或者接收器实参是类型T,形参是类型T。编译器会隐式地为我们解引用,取到指针指向的实际变量:
  pptr。Distance(q)implicit(pptr)
  如果命名类型T(译注:用typexxx定义的类型)的所有方法都是用T类型自己来做接收器(而不是T),那么拷贝这种类型的实例就是安全的;调用他的任何一个方法也就会产生一个值的拷贝。比如time。Duration的这个类型,在调用其方法时就会被全部拷贝一份,包括在作为参数传入函数的时候。但是如果一个方法使用指针作为接收器,你需要避免对其进行拷贝,因为这样可能会破坏掉该类型内部的不变性。比如你对bytes。Buffer对象进行了拷贝,那么可能会引起原始对象和拷贝对象只是别名而已,实际上它们指向的对象是一样的。紧接着对拷贝后的变量进行修改可能会有让你有意外的结果。
  不管你的method的receiver是指针类型还是非指针类型,都是可以通过指针非指针类型进行调用的,编译器会帮你做类型转换。
  在声明一个method的receiver该是指针还是非指针类型时,你需要考虑两方面的因素,第一方面是这个对象本身是不是特别大,如果声明为非指针变量时,调用会产生一次拷贝;第二方面是如果你用指针类型作为receiver,那么你一定要注意,这种指针类型指向的始终是一块内存地址,就算你对其进行了拷贝。熟悉C或者C的人这里应该很快能明白。

为什么智能交通需要时间同步?当前,互联网正从消费互联网向产业互联网转型升级。服务于广大传统行业的产业互联网,在未来,有望成为互联网发展的重大趋势。在不久的将来,物联网可广泛应用于智能交通。智慧交通将……新的时代开始了慢生意时代中国互联网激荡昂扬了二十年之后,终于迎来了向下的拐点。过去,互联网行业年年都有风口,年年都有新词汇,今年却异常安静乖巧。除了热度从去年延续到今年的社区团购,整个行业已经看不到任……挺华为,喷联想,网友态度为啥一边倒?因为,华为是民族的脊梁,而联想是民族的耻辱,理由就这么简单。这个问题的原因虽然很多,但最重要的一点就是美国因素:因为美国对华为的制裁,因为美国对联想的不制裁甚至支持!美国……互联网虚拟经济虚假的繁荣2022年的新冠疫情变异病毒不断发生变化,道高一尺,魔高一丈,科学医学人员在不断总结经验教训,努力研究特效药,中医也在推广新的配方,抗疫医疗物资在准备充足,生活物资基本保障,互……微软元宇宙也会充斥黑客和犯罪集团,需提前制定治安框架据报道,日前,微软网络安全负责人呼吁,元宇宙平台们需要武装起来,在这个新技术刚开始发展时,就阻止黑客和犯罪集团破坏。微软新上任的安全负责人查理贝尔表示,元宇宙领域将会有许多的创……科技大爆发的脚步越来越近大变革的时代,为科技大爆发扫清障碍。仔细看这个世界,不管是原始社会、会、资本社会,其实都是在适应着从石器时代、青铜器时代、工业革命时代的科技进步的步伐,科技决定政治结构,……为什么华为4G手机卖五千照样有人买账,小米什么时候能做到?other不碰瓷活不下来了小米不用做到,不管卖五百还是卖五千,小米只卖超值的产品,把垃圾卖出天价不符合小米的价值观。说起来有点讽刺,华为在2019年的时候推广……柳传志到底有没侵吞国有资产?联想的前身是中科院计算所,后来改制,柳传志担任总经理,倪光南院士担任总工,是100的国企。倪光南院士当时提出并实施了技工贸企业发展路线,提出(芯片操作系统)作为企业发展方向,后……现在NFT很火,NFT怎么提现,有什么靠谱的方式吗?首先nft的交易在我国内是不允许的。nft的大火也是随着元宇宙这个概念迎来了春天。在国内,nft处于萌芽状态,生态尚没有完善,目前一些互联网大厂主导下的国内nft市场是相……汽车迎来智能网联时代,建设法律制度以保障数据安全势在必行如今新能源汽车的发展已经渐入佳境,逐渐找到了自己的发展节奏。此时的电动化、智能化、网联化、共享化成为了汽车的新标签。大部分消费者在选购汽车时越来越注重智能驾驶体验,殊不知,智能……骁龙870手机小米10S推送MIUI12。5稳定版内测IT之家5月15日消息据网友反馈,小米10S今天推送了MIUI12。5稳定版内测。小米于去年12月发布最新一代MIUI12。5系统,官方表示此次升级不亚于一个大版本更新,……为什么网络讨论中的理性发声越来越少?对大部分人来说,理性思考太难了,单纯的骂骂美日,既能发泄生活中被压迫的不满,又能拉个政治正确的爱国情怀当帽子买不起房买不起车都是因为日本鬼子和美帝压迫。看上的姑娘要……
小米11Lite5GNE印度售价出炉,小米11让路新机一夜跌据印度媒体91mobiles报道,小米11Lite5GNE即将在印度上市。这是今年早些时候在印度推出的小米11Lite4G的5G版本。新闻发布会定于9月29日举行。现在,小米1……OPPO新机将于9月发布天玑120060W快充,性价比是主打作为国内主流手机厂商之一,OPPO手机这两年的快速发展是大众有目共睹的,无论是手机销量与市场份额均有所提升,无独有偶,在近期多方媒体的不断曝光之下,又有一款OPPO新机被基本确……数字化转型实践之二企业如何规划数字化转型对于企业来说,规划数字化转型很多时候可能是从,比如:财务软件、邮件系统、官网小程序等上面考虑的。但是这些财务软件、邮件系统、官网小程序,其实只是企业业务应用的某些业务线,并谈不……苹果不变的姿态,变化的产品前言:苹果已经是市值最高的科技企业了,其产品力和产品理念独树一帜。在经历了这么多代的iPhone以后,一年一度的苹果发布会也即将开始。人们期待,甚至被媒体称为一年一……北京冬奥定制款手机最高售价16万!到底贵在哪里?在22年春节期间,首都北京成功开幕第24届冬季奥林匹克运动会,作为全球最热门的赛事,各大品牌商都想占领一席之地,当然了手机也不会放过这次展现自我的机会!从官方发布的消息来……深度关注鸿蒙会带来什么中央纪委国家监委网站管筱璞李云舒6月3日,上海用户在华为全球旗舰店内体验鸿蒙操作系统。(图片来源:视觉中国)设想一下,你在汽车上语音通话,熄火下车后可以把通话转移到……融资丨墨睿科技完成超亿元两轮融资,立足硬核科技石墨烯创业邦获悉,2月8日,国内唯一可定制化满足下游需求的石墨烯研发生产商墨睿科技,连续完成两轮融资,融资金额超亿元人民币。两轮融资分别由产业机构晨道资本独家投资和财务机构越秀……华为缺货之后,苹果再无对手?国内超6成高端市场份额属于苹果在中国高端手机市场,华为是唯一一个曾和苹果打成平手的国产品牌,不过随着禁售令的多次升级,华为元器件的供应受到了限制,旗下的P系列、mate系列机器也多次面临缺货;从各大机构的数……月初月底打1008611防止移动偷话费10086111是中国移动推出最有意义的服务,我认为没有之一。多年来经常听人家说移动经常莫名其妙就扣费,我自己就从来没有遇到这种情况,或许与我的号码经常投诉移动的业务有关……宇宙年龄只有140多亿年,宽度却有920亿光年,这是不是一个啊呀,这个题目提醒我了一下,我家的小狗快1岁了,居然有40厘米长了,这不是明显是个悖论吗言归正传,这个题目的内容里有几个含义:首先,光年是个距离概念,而年是个时间概念,也……老铁们,怎么看待京东春晚广告中的30亿?这个问题是不是问错了???老铁们不管怎么看,首先你得是京东广告当中真的提了付出了30亿,可是官方中已经提出了本次京东支持的春晚总计赞助的是15亿,奖金加上代金券及礼品。什……融资丨TRLab完成420万美元融资,获艺术和科技界领军投资创业邦获悉,香港与纽约时间2022年1月26日,致力于发现、收藏并与全球一线艺术家合作的策展型NFT艺术平台TRLab宣布完成420万美元融资。本轮融资由艺术市场和科技领域的重……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网