首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Go方法中通过值传递"this“是否会有性能损失?

在Go方法中通过值传递"this“是否会有性能损失?
EN

Stack Overflow用户
提问于 2013-03-10 18:56:02
回答 4查看 1.4K关注 0票数 5

在经历了9年的C++开发之后,我正在探索Go。在C++中,除了内置类型的变量外,按值传递函数的参数是一种不好的做法,因为会造成性能损失:参数的所有字段都将被复制,并且在大多数情况下,这将是一个非常昂贵的操作。

Go也是这样吗?仅通过值传递"this“以将"const”语义赋值给方法看起来代价很高。Go编译器是否足够聪明,可以防止变量在第一次修改之前被复制?为什么在Go中按值传递"this“不像在C/C++中那样是一种反模式?

EN

回答 4

Stack Overflow用户

发布于 2013-03-10 23:07:49

其他答案都很好,但在我看来,缺少一些信息。

Go中的接收器只是语法糖,如以下code所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import "fmt"

type Something struct {
    Value int
}

func (s *Something) ChangeValue(n int) {
    s.Value = n
}

func main() {
    o := new(Something)             // o is of type *Something
    fmt.Println(o.Value)            // Prints 0
    o.ChangeValue(8)                // Changes o.Value to 8
    fmt.Println(o.Value)            // Prints 8
    (*Something).ChangeValue(o, 16) // Same as calling o.ChangeValue(16)
    fmt.Println(o.Value)            // Prints 16
}

在此基础上,考虑如果ChangeValue的接收方是Something类型的值而不是指向该类型的指针,会发生什么情况……

没错!你永远不可能通过这个方法来改变oValue字段,大多数时候,你会使用指针接收器来进行封装。

票数 10
EN

Stack Overflow用户

发布于 2013-03-10 19:10:03

Go中的"this“被称为receiver。是的,使用非指针接收器来模拟"const“语义可能是非常昂贵的。但Go去掉了"const“修饰语是有充分理由的。因此,以不必要的复制为代价来接管特定的语言设计决策可能不是一个好主意-在任何比几个机器单词更大的情况下。

顺便说一句,"this“或"self”与"receiver“之间的术语差异意味着它也具有不同的语义。IIRC中,在其他语言中不能更改"this“或"self”的值,但在Go中,接收器只是另一个函数参数(实际上是从编译器的角度来看的第一个参数)。

也就是说,这就是我不鼓励编写接收器变量命名为thisself的方法的原因。对于习惯于其他语言的人来说,这是一种误导。

一个完全虚构的例子,希望能说明这个想法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func (n *node) walk(f func(*node)) {
        for n != nil {
                f(n)
                n = n.next
        }
}
票数 6
EN

Stack Overflow用户

发布于 2013-03-10 19:21:38

我要说的是,你的C++知识可以很好地转化为函数参数的开销(通过值传递结构)和开销(内置类型,例如整型)。

主要的区别是引用类型,切片,mapchannel。虽然它们看起来是通过值传递的(你不需要使用指针),但实际上是通过引用传递的,所以通常不要使用指向切片、映射或通道的指针。

string也很特殊-它们是幕后的引用类型,但它们也是不可变的,所以直接传递它们。

至于this或Go中调用的接收器的具体情况-同样的规则适用(请注意,与C++不同,您可以使用内置类型作为接收器),我认为编译器不够智能,无法避免复制,因此对大型结构使用指针。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15326185

复制
相关文章
web爬虫项目实战-分类广告网站的数据抓取
今天我们使用Web抓取模块(如Selenium,Beautiful Soup和urllib)在Python中编写脚本来抓取一个分类广告网站Craigslist的数据。主要通过浏览器访问网站Craigslist提取出搜索结果中的标题、链接等信息。
XXXX-user
2019/07/31
1.7K0
web爬虫项目实战-分类广告网站的数据抓取
企业网站建设用哪种cms网站管理系统好?
现在要建立一个企业网站,使用cms网站管理系统是最好的方法,可以仿站,可以使用现成的模板,也可以定制模板,虽然前端模板是大头,但是网站后台的好坏我们也需要讲究一下,cms网站管理系统很多,但是主流的,成熟的网站系统也不是很多,主要有PageAdmin Cms、织梦cms,帝国cms,phpcms等,并且包含这几种系统的模板都可以在A5站长站下载,至于哪个cms好一点,其实这个真没有固定的,有的人觉得织梦好,有的人觉得pageadmin好,也有的人觉得帝国cms好用。
用户4831957
2020/08/01
5K0
政务服务网站部署哪种SSL证书?
我国高度重视电子政务发展,提出以信息化推进国家治理体系和治理能力现代化,统筹发展电子政务,构建一体化在线服务平台。《关于加快推进全国一体化在线政务服务平台建设的指导意见》《关于加快推进政务服务“跨省通办”的指导意见》等一系列文件相继印发,不断强化数字政府的顶层设计。
沃通WoTrus数字证书
2023/03/31
12.3K0
政务服务网站部署哪种SSL证书?
电商网站使用哪种证书比较好?
进入新千年以来,网络技术的迅猛发展和快速普及应用,给我们的生活,工作,学习带来了极大的便利。尤其是最近10年的发展,使得我们的生活方式也随之改变,比较典型的就是现代社会对网络购物的极大需求。这也由此推动了电商网站的发展壮大,并且随着网络安全意识的提升,通过网站加密保护用户数据安全,已经成为诸多电商网站的共识。
JoySSL
2023/02/23
4350
电商网站使用哪种证书比较好?
个人博客网站选择哪种博客程序比较好?
关于个人博客一直都存在两种风格,一个是独立博客另外一种是非独立博客之分(免费的)。很容易理解独立博客嘛就是需要自己购买域名+服务器,类似本站这种,那么非独立博客就是新浪博客、网易博客等第三方服务商了,非独立博客自然不需要我们自己购买域名和服务器,但是也不能任我们随意折腾,而且主动权在别人手里。所以搭建个人博客网站还是建议使用独立的个人博客,那么这就涉及到该选用什么博客程序比较好,今天老生常谈,抛砖引玉,就目前而言我推荐三款博客程序,详细介绍如下(排名不分先后)。
李洋博客
2023/03/03
1.6K0
个人博客网站选择哪种博客程序比较好?
做企业网站用哪种cms比较好?
都2022了,一个企业如果没有网站就有点low了呀,国内的中小型企业居多,在推广上投入的资金也是有限的,很多中小企业就做个网站,基本不去推广,跑题了,我们今天讨论的是企业站用哪种cms比较好;
小唐同学.
2022/02/18
4.8K0
个人博客网站选择哪种博客程序比较好?
关于个人博客一直都存在两种风格,一个是独立博客另外一种是非独立博客之分(免费的)。很容易理解独立博客嘛就是需要自己购买域名+服务器,类似本站这种,那么非独立博客就是新浪博客、网易博客等第三方服务商了,非独立博客自然不需要我们自己购买域名和服务器,但是也不能任我们随意折腾,而且主动权在别人手里。所以搭建个人博客网站还是建议使用独立的个人博客,那么这就涉及到该选用什么博客程序比较好,今天老生常谈,抛砖引玉,就目前而言我推荐三款博客程序,详细介绍如下(排名不分先后)。
雾海梦曦
2022/11/14
1.6K0
个人博客网站选择哪种博客程序比较好?
域名推荐哪种好,建设网站需要域名吗
能够拥有一个好的域名,是可以在网络上留住流量的,而且好的域名是很容易被人记住的,这在无形中起到了对企业的宣传作用。有些人可能正在准备注册域名,关于域名推荐哪种好?不会申请域名怎么办?相信很多人正面临着这样的难题。
用户8739990
2021/07/23
5.8K0
域名推荐哪种好,建设网站需要域名吗
个人博客网站选择哪种博客程序比较好?
关于个人博客一直都存在两种风格,一个是独立博客另外一种是非独立博客之分(免费的)。很容易理解独立博客嘛就是需要自己购买域名+服务器,类似本站这种,那么非独立博客就是新浪博客、网易博客等第三方服务商了,非独立博客自然不需要我们自己购买域名和服务器,但是也不能任我们随意折腾,而且主动权在别人手里。所以搭建个人博客网站还是建议使用独立的个人博客,那么这就涉及到该选用什么博客程序比较好,今天老生常谈,抛砖引玉,就目前而言我推荐三款博客程序,详细介绍如下(排名不分先后)。
李洋博客
2021/09/18
3.9K0
个人博客网站选择哪种博客程序比较好?
对 2006 年 房地产互联网行业 的一点预测:
1.  中介公司互联网需求旺盛,有实力的中介公司逐步建立起自己的服务网站, 但处于一个困境, 服务于本地,市场不够大,扩张又现实 , 因此 大多 数中介公司仍然 倚赖 于和  互联网大公司合作,合作非常紧密 , 这部分收入也逐渐增多. 2.  建材,家装 行业 的互联网 广告宣传进一步 扩大. 除了 跟 房产门户合作外, 也有一部分流向 google , 百度 等互联网广告公司 , 这对 互联网房产 公司 来说 会造成收入的流失.   3房地产行业是: 强龙和地头蛇的关系.  顺驰很牛 在 广周 也 作不过 地头蛇 满堂红.  随者 房地产 中介行业 的进一步成熟,   地方中介公司会注重品派和持久经营, 顺驰类的 全国行业联锁公司 也会逐步 把资源集中于几个 大城市,改变以往 三珠 全国联锁的做法.   4分类广告网站 关闭 大部分.       分类广告网站 是 2005 年 在  kijiji 的带领下 冒出来的一个 网站群体 , 由于 大部分网站没有信息诚信保证,会逐步失去用户,变为 免费广告的集散地 , 进而 消失.  而房产中介信息是分类广告的一个组成部分 , 建议 原意 投入 房产行业的 分类广告网站 踏实心态 , 为中介公司服务,转行生存. 5. 房地产行业的垂直搜索引擎仍不能出现.     在旅游和购物行业垂直搜索引擎已经有了一部分公司,之所以有市场是因为顾客本身有信息鉴别能力,只需要了列出信息,即可自行判断 , 而房产行业水比较深,需要较多行业知识,且交易金大,才能做出决定. 因此房产行业的垂直搜索引擎仍只是锦上添花. 2006-01-01 第一次 在 linux 下写blog, 很爽.
田春峰-JCJC错别字检测
2019/02/14
2670
开源一款多人博客或者社区网站系统,适用于资讯网站!
MB MB是基于Jfinal开发的多人博客或者社区网站,二次开发之后也可以作为资讯网站等。具有简单、大气、美观、响应式设计,易二次开发的优点。前台有一部分界面参考了[mblog],后台使用AdminLTE。第一次开源,本人水平有限,很多地方还可以改进,有不足的地方还请大家多多指正。 参考网站: http://mb.daymooc.com 技术选型: JDK8 Jfinal 3.1 缓存 Ehcache 视图模板 Jfinal enjoy模板 其它 Jsoup、fastjson、ajax jQuery Boo
开源日记
2023/03/10
6950
开源一款多人博客或者社区网站系统,适用于资讯网站!
XCode读取Excel数据(适用于任何数据库)
虽然是充血模型,虽然是强类型,XCode同样支持遍历任何数据库结构,并以强类型(相对于DataSet等字典访问)方式读取数据。 要遍历数据库结构是很容易的事情,绝大多数Orm都支持。 但是在没有实体类的情况下以强类型方式读取数据,就稍微有些复杂。XCode的原理是为每张表动态创建继承自Entity<>的实体类,然后通过接口来操作实体类。 代码中有了快速反射,虽然没有性能损耗,但是用起来挺别扭的,这里说明了XCode对于实体类元数据的动态访问支持还不够。 // 添加一个连接 DAL.AddConnStr("t
大石头
2018/01/15
1K0
云计算数据库选项:哪种类型更适合?
数据仓库虚拟化初创厂商Datometry公司创始人兼首席执行官Mike Waas推荐了三种关键类型的云计算数据库选项,可以让企业在评估解决方案期间考虑。
静一
2022/12/08
7570
它们很丑,但有时易用性比视觉更重要
在如今这个强调美与体验的时代,你依然会发现大量很受欢迎但却丑出境界的网站。 Wikipedia,Reddit,Craigslist,Hacker News 上面这几个都是流量超高的站点,它们依然
前朝楚水
2018/04/03
7310
它们很丑,但有时易用性比视觉更重要
ftP网站建设数据库安装 网站的数据库怎么搭建
对于企业而言,一个网站就相当企业的形象,既能提高用户对企业的信任也能促进成交率,由此可见,企业网站对企业是多么的重要。但很多企业对网站的搭建都不太了解,以为网站搭建很难,其实只要掌握一些前端跟后端的知识,还是很容易搭建的。下面先给大家分享一下ftP网站建设数据库安装的方法。
用户8715145
2021/12/08
4.1K0
数据库学习网站
中国ACCESS XP FAQ网站 http://bcd.office-cn.net/ 对 ACCESS XP 技术精品文章、FAQ 和参考手册都进行整理归类,以便于大家查找和阅 读,并欢迎广大网友来稿或推荐稿件。
全栈程序员站长
2022/09/20
1.3K0
服务器加网站防盗链,网站防盗链的设置方法介绍(适用于IIS和Apache)[通俗易懂]
这篇文章主要为大家详细介绍了网站防盗链的设置方法介绍(适用于IIS和Apache),具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴。
全栈程序员站长
2022/09/15
1.1K0
vue与react哪种好?
vue与react,到目前为止两个我都用来写了好多项目,vue用的脚手架是vue-cli,react用的是dva,两者都对其进行了很好的封装,只需要简单的几步就能跑起来.
杭州前端工程师
2019/03/12
8770
【网站优化经验】使用Memcached缓存数据库加速网站
Memcached 是一个高性能的分布式内存对象缓存系统,与redis相似。且比memcache支持更多高级功能。
幻影龙王
2021/09/11
2.3K0
【网站优化经验】使用Memcached缓存数据库加速网站
安装适用于 Java 的 TensorFlow安装适用于 Java 的 TensorFlow
TensorFlow 可提供在 Java 程序中使用的 API。这些 API 特别适合用于加载以 Python 语言创建的模型并在 Java 应用中运行这些模型。本指南将介绍如何安装适用于 Java 的 TensorFlow 并在 Java 应用中使用 TensorFlow。
一个会写诗的程序员
2018/08/17
1.2K0

相似问题

默认验证消息ASP.NET核心

20

如何使用javascript更改.net核心验证器错误消息?

111

表单的ASP.Net核心多语言验证消息

20

ASP.NET核心MVC模型验证错误消息未显示

10

Yii框架消息-更改核心消息

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文