Go 中什么时候应该使用 new ?

2023-11-22

在原始语言结构中使用似乎毫无意义,因为您无法指定任何类型的值

func main() {
    y := new([]float)
    fmt.Printf("Len = %d", len(*y) ) // => Len = 0
}

对于结构来说,它使bit更有道理,但是说起来有什么区别y := new(my_stuct)以及看似更简洁的y := &my_struct?

由于您创建的任何内容都基于这些原语,因此它们将被初始化为所述零值。那么有什么意义呢?你什么时候想使用new()?

很抱歉这个非常初学者的问题,但文档并不总是那么清晰。


你不能使用new对于切片和地图,如代码示例中所示,但您必须使用make command: make([]float, 100)

Both new(MyStruct) and &MyStruct{}做同样的事情,因为如果你用 & 得到它们的地址,Go 就会在堆上分配值。有时,代码只是以一种或另一种风格更好地表达其意图。

Go 没有对构造函数的内置支持,因此通常您会将调用包装为new到一个函数中,例如NewMyStruct()它执行所有必要的初始化。它还可以初始化私有字段或将结构隐藏在接口后面,以防止对象的用户直接弄乱其内部结构。当您在添加/删除/重命名/重新排序字段时不需要更改其所有用户时,以这种方式发展结构的结构也更容易。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go 中什么时候应该使用 new ? 的相关文章

  • golang中默认的HTTP拨号超时值

    我正在运行 golang http 客户端来对服务器进行压力测试 有时我会收到错误 拨号 tcp 161 170 xx xxx 80 操作超时 错误 我认为这是 HTTP 客户端超时 我正在考虑增加超时值https stackoverflo
  • go build 不断抱怨:go.mod 有 post-v0 模块路径

    Go 1 11 发布后 我一直在尝试将我的存储库移动到 Go 模块 方法是添加go mod文件在其根目录下 我的根库之一my host root其版本为17 0 1 所以我在其中写道go mod file module my host ro
  • 带有导出字段的私有类型

    在 Go 教程的第二天有这样的练习 为什么拥有带有导出字段的私有类型会很有用 例如 package geometry type point struct X Y int name string 请注意point是小写的 因此不会导出 而字段
  • 限制 FormFile 中的文件大小

    我让用户使用 FormFile 上传文件 我应该在什么时候检查文件大小是否太大 当我做 file header fileErr r FormFile file 文件对象已经创建 那么我是否已经产生了读取整个文件的成本 https golan
  • 正则表达式不匹配

    我正在尝试以下代码 d byte x01 x00 x00 x00 x00 x00 x00 x00 x00 x00 x00 x80J x13 x80SQ x80L xe0 x80 x92 x80L x80H xe0 r regexp Must
  • 无法将字符串解组为 int64 类型的 Go 值

    我有结构 type tySurvey struct Id int64 json id omitempty Name string json name omitempty I do json Marshal在 HTML 页面中写入 JSON
  • K8s更改配置映射并更新应用程序日志级别

    我想更改在 K8S 上运行的 Golang 应用程序的登录配置 我在本地尝试了以下代码 它按预期工作 我正在使用 viper 来监视配置文件更改 这是带有日志配置的配置图 apiVersion v1 kind ConfigMap data
  • 如何获取文件的 ctime、atime、mtime 并更改它们

    如何使用 Go 获取文件的 ctime mtime atime 并更改它们 在 Go 1 1 2 中 os Stat只能获取mtime os Chtimes 可以更改 mtime 和 atime 但不能更改 ctime Linux ctim
  • runtime.LockOSThread 是否允许子 goroutine 在同一个操作系统线程中运行?

    我明白在 Go 中 runtime LockOSThread https golang org pkg runtime LockOSThread将一个 goroutine 绑定到一个操作系统线程 并且不允许其他 goroutine 在该线程
  • 当变量更新时动态刷新模板的一部分golang

    在Golang中 当变量更新时可以刷新模板的一部分吗 例如 我们可以在 Angular js 中找到这一点 基本上在我的代码中 我通过 ajax 中的邮政编码查找地址 它显示我找到的该邮政编码的用户列表 Here is a sample o
  • Golang Appengine 项目无法构建

    我有一个使用 golang 的应用程序引擎项目 我已经大约一年没有碰过了 我现在无法让它在之前构建的机器上构建 我收到以下错误 go app builder 解析输入失败 解析器 src golang org x net internal
  • 如何在 Goji (Golang) 中使用不同的中间件创建单独的路由组?

    我正在使用Goji https github com zenazn goji https github com zenazn goji 并希望定义具有自己的中间件的路由组 例如 下面的所有路径 company应使用 LDAP 身份验证并定义
  • 无法连接到代理“证书由未知机构签名”

    我正在尝试通过 Kubernetes 部署上的 cloudsql proxy 容器连接到 CloudSQL 实例 我已安装 cloudsql 凭据以及值GOOGLE APPLICATION CREDENTIALS set 但是 我的日志中仍
  • 无法通过键获取 Gorilla 会话值

    我无法通过这种方式从会话中获取价值 它是nil session initSession r valWithOutType session Values key 完整代码 package main import fmt github com
  • 投射回更专业的界面

    我正在用 Go 编写一个游戏 在 C 中 我将所有实体类存储在 BaseEntity 类的数组中 如果一个实体需要在世界中移动 那么它将是一个从 BaseEntity 派生的 PhysEntity 但添加了方法 我尝试模仿这是 go pac
  • 我可以根据我正在构建的操作系统导入 Golang 包吗?

    假设我有一个基于哪个操作系统的 go 项目 在某些情况下是哪个发行版 我想使用 Systemd 客户端包 Upstart 客户端包 sysv 客户端包 launchd 客户端包 是否可以有选择地导入每个包 以便我只导入我正在构建的每个操作系
  • Go 无法推断赋值中的类型:“non-name on left side of :=”

    该片段按预期工作play golang org p VuCl OKMav http play golang org p VuCl OKMav i 10 next 11 prev i i next 然而这个几乎相同的片段给出了non name
  • Golang中如何删除字符串的最后一个字符?

    我想删除字符串的最后一个字符 但在此之前我想检查最后一个字符是否是 如何才能做到这一点 以下是删除尾随加号的几种方法 package main import fmt strings func TrimSuffix s suffix stri
  • 使用 OpenTelemetry 统一不同服务的范围

    我刚刚开始使用 OpenTelemetry 并为此创建了两个 微 服务 Standard and GeoMap 最终用户将请求发送到Standard服务 该服务又将请求发送到GeoMap在将结果返回给最终用户之前获取信息 我使用 gRPC
  • 为什么 Go 中只有 int 而没有 float?

    在 Go 中 有这样的类型int这可能相当于int32 or int64取决于系统架构 我可以声明一个整数变量而不用担心它的大小 var x int 为什么没有这个类型float 这相当于float32 or float64取决于我的系统架

随机推荐

  • 如何使用 Python 在 NLTK 中使用斯坦福解析器

    是否可以在 NLTK 中使用斯坦福解析器 我不是在谈论斯坦福 POS 请注意 此答案适用于 NLTK v 3 0 而不适用于更新的版本 当然 请在 Python 中尝试以下操作 import os from nltk parse impor
  • ffmpeg命令组合音频和图像

    我正在努力实现一些我之前认为应该是一项简单任务的事情 是否有一个 ffmpeg 命令可以执行以下操作 将 audio wav 文件转换为视频 将大约 100 张图片 img d png 添加到视频中 以便它们 自动 拉伸以填充视频的整个长度
  • 如何使用现有的 for 循环在 Liquid 模板中进行 n.times 循环

    在 ruby 中我可以做 n times do 是否可以在 Liquid 标记中做到这一点 我当前的循环是 对于 site posts 中的视频 我的目标是运行此循环 2 次 目前有 4 个对象将通过循环调用 但我想要 8 个 我希望这一点
  • 将 .NET 中的 DateTime 对象格式化为 Objective-C 的 NSDate

    我正在使用一个 API 它将 NET DateTime 对象返回到我的 iOS 应用程序中 我对发生的事情有点困惑 DateTime 在离开 API 时看起来很好 但是当它进入时 它会通过 JSON 并以字符串形式出现 如下所示 Date
  • 从 JavaScript 打开本机地图应用程序,而不依赖经度和纬度坐标

    我正在寻找一种从phonegap 包装的JavaScript 应用程序打开应用程序的本机地图应用程序的方法 到目前为止 我的研究表明 对于 Android 我必须使用以下格式的链接 a href Geolocation Test a 这是有
  • 在 vim 中将 :Wq 重新映射为 :wq

    很多时候 当我想在 vim 中保存文件并立即退出时 我不小心输入了 Wq 而不是 wq Vim 自然地给了我这个错误 E492 Not an editor command Wq 我想知道是否可以将 Wq 重新映射到 wq 您可以创建一个简单
  • 如何将 CSS 下拉菜单居中 [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我需要一些帮助 我有一个 CSS 下拉菜单 但我希望标题居中 这样在所有屏幕尺寸上它都会位于中间 因为目前它卡在左侧 http jsfiddle net y4vDC 任何帮助将不胜感激 下
  • 如何将指向成员函数的指针传递给 C 函数? [复制]

    这个问题在这里已经有答案了 可能的重复 使用 C 类成员函数作为 C 回调函数 我正在使用 C 库 winpcap 编写一个面向对象的库 我需要传递网络数据包到达时调用的回调函数作为函数指针 我想将成员函数指针传递给 winpcap 以保持
  • React Router:查询参数匹配?

    根据已接受的答案这个问题 React Router 4 不再匹配查询参数 如果我从与我的其中一个匹配的 URL 访问
  • .Net 中 stackalloc 的缓冲区溢出保护

    来自 stackalloc 的 C 参考 使用 stackalloc 会自动启用公共语言运行时 CLR 中的缓冲区溢出检测功能 如果检测到缓冲区溢出 则会尽快终止进程 以最大程度地减少执行恶意代码的机会 具体来说 NET实现了什么样的保护机
  • 对(十六进制)颜色进行排序以匹配彩虹

    我有一个以十六进制表示的颜色列表 我需要对它们进行排序以匹配彩虹中颜色的顺序 我可以硬编码排序顺序 但我觉得有一种更干净的方法 下面是一个函数 给定十六进制 RGB 颜色规范 返回其 HSV 颜色 import colorsys def g
  • 如何计算某个日期范围内有多少晚?

    我需要根据入住和退房日期计算住宿天数 入住酒店 最好的方法是什么 即 如果我有 Checkin 12 11 2009 15 00 hs Checkout 14 11 2009 12 00 hs Doing Checkout Checkin
  • 如何使 ON DELETE CASCADE 在 sqlite 3.7.4 中工作?

    我检查了几次功能列表 似乎级联应该可以工作 当我执行这个 python 脚本时 usr bin env python3 import sqlite3 print sqlite3 sqlite version con sqlite3 conn
  • 是否可以检测 ACTION_SEND Intent 是否成功?

    我有一个简单的 Android 应用程序 其代码如下 来自安卓文档 Intent sendIntent new Intent sendIntent setAction Intent ACTION SEND sendIntent putExt
  • Dockerfile 的优点

    我们可以创建 Docker 映像并将它们全部推送到 Hub 而无需 Dockerfile Dockerfile 为什么有用 它有什么优点呢 Dockerfile 的创建是一个非常耗时的过程 并且只能由人来完成 我想知道基于基础镜像的提交镜像
  • msysgit 的麻烦

    所以我似乎在设置 msysgit 时遇到了一些实际问题 我可以使用 putty 连接到我的 SSH 目录 ssh 用户 主机 端口 我有正确的钥匙 我也可以使用 plink 通过 plink P PORT user host i path
  • jVectorMap 渲染太小

    我的 jVectorMap 没有采用我在包含的 div 上提供的新高度 并且仅以默认 高度 54px 进行渲染 这是我的 script js 文件中的 document ready 函数 team map usa vectorMap map
  • MS Project 甘特图控件在 C# 中的使用

    有人用过 C 中的 MS Project 甘特图控件吗 如果是 您能分享一些与此相关的资源吗 您还可以检查甘特图库对于 WPF 或 Windows 窗体 它们不需要在客户端计算机上安装 Microsoft Project 但为项目和相关甘特
  • 中继器内的复选框,如何在检查更改功能中获取命令名称值

    您好 我的 asp net listview 项目模板中有上面的 html 标记 td td
  • Go 中什么时候应该使用 new ?

    在原始语言结构中使用似乎毫无意义 因为您无法指定任何类型的值 func main y new float fmt Printf Len d len y gt Len 0 对于结构来说 它使bit更有道理 但是说起来有什么区别y new my