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 ? 的相关文章

  • Go中如何从json字符串中获取键值

    我想尝试从 Go 中的 JSON 获取键值 但我不确定如何操作 我已经能够使用 simplejson 读取 json 值 但是我无法找到如何获取键值 有人能指出我正确的方向和 或帮助我吗 谢谢你 您可以通过执行以下操作来获取 JSON 结构
  • 从 []byte 到 char*

    我想包装一个 C 函数 它需要一个char 指向非空字节缓冲区 的第一个元素 我正在尝试使用 CGo 将其包装在 Go 函数中 以便我可以将其传递给 byte 但我不知道如何进行转换 C 函数签名的简化版本是 void foo char c
  • 在 Go 中跟踪 HTTP 请求时指定超时

    我知道通过执行以下操作来指定 HTTP 请求超时的常用方法 httpClient http Client Timeout time Duration 5 time Second 但是 我似乎不知道在跟踪 HTTP 请求时如何执行相同的操作
  • 如何分析 VSCode 中函数的性能

    我用 C Golang 编写了一个程序 如何找到占用最高 CPU 周期的函数 目的是提高正在执行的程序的性能 2021 年 10 月 金香儿哈娜 https github com hyangah宣布 tweet https twitter
  • for 循环初始值设定项中的结构

    知道为什么 for 循环初始值设定项中的这个结构表达式在编译时会出现语法错误吗 在这种情况下 指向结构的指针工作正常 但 ofc 我需要如下所示的局部变量 感谢您的建议 type Request struct id int line byt
  • 展平嵌套结构会导致切片的切片

    所以我有一个像这样的结构 type Bus struct Number string Name string DirectStations Station Station is another struct ReverseStations
  • 匿名结构和空结构

    http play golang org p vhaKi5uVmm http play golang org p vhaKi5uVmm package main import fmt var battle make chan string
  • 这两种方式哪一种是惯用的方式? time.Sleep() 还是自动收报机?

    我必须每分钟执行一些语句 我不确定我应该遵循以下哪一项 如果有人能解释内存和 CPU 方面的优缺点 那就太好了 时间 Sleep func main go func for time Sleep time Minute fmt Printl
  • 如何将 int[] 转换为 uint8[]

    所以 我需要你的帮助 我找不到关于该主题的任何内容 Golang 是一门刚刚诞生的语言 所以对于像我这样的新手来说很难快速找到答案 预先声明的 Goint类型大小是特定于实现的 32 位或 64 位 数字类型 http golang org
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 如何将 Unicode 字符转换为简单形式? [复制]

    这个问题在这里已经有答案了 有没有一个Go库可以Sj str m作为输入和返回Sjostrom作为输出 您可以使用golang org x text unicode norm来处理这个问题 package main import fmt i
  • 有队列实现吗?

    任何人都可以建议使用 Go 容器来实现简单快速的 FIF 队列 Go 有 3 种不同的容器 heap list and vector 哪一种更适合实现队列 事实上 如果您想要的是一个基本且易于使用的 fifo 队列 slice 可以满足您所
  • os.Mkdir 和 os.MkdirAll 权限

    我正在尝试在程序开始时创建一个日志文件 我需要检查是否 log如果不创建目录 则目录存在 然后继续创建日志文件 好吧 我尝试使用os Mkdir 也os MkdirAll 但无论我在第二个参数中输入什么值 我都会得到一个没有权限的锁定文件夹
  • 在 Visual Studio Code 中调试 Go 测试

    在我的 Windows 计算机上 我安装了 Visual Studio Code 要手动运行测试 我进入控制台到项目文件夹并输入 go test main test go 它工作完美 但我遇到一种情况 我需要调试我的测试以了解发生了什么 为
  • select 语句是否保证通道选择的顺序?

    继从这个答案 https stackoverflow com a 25795236 274460 如果一个 goroutine 在两个通道上进行选择 是否保证通道的选择顺序与其发送的顺序相同 我对发送者是单线程的情况特别感兴趣 例如 是否保
  • 如何读取大型平面文件

    我有一个平面文件 其中包含 339276 行文本 大小为 62 1 MB 我试图读入所有行 根据我所拥有的某些条件解析它们 然后将它们插入数据库 我最初尝试使用 bufio Scan 循环和 bufio Text 来获取该行 但缓冲区空间不
  • golang中通道缓冲容量0和1的区别

    我已将通道缓冲区大小设置为零 例如var intChannelZero make chan int 当从intChannelZero将被阻止 直到intChannelZero有价值 另外 我将通道缓冲区大小设置为 1 例如var intCh
  • 实现具有更广泛方法签名的接口

    在Go中 是否有一种方法可以使用方法来实现接口 其中实现中相应方法的返回类型 比 预期返回类型 更宽 这很难解释 所以这里有一个例子 在 Go Playground 中运行以下示例代码时出现此错误 prog go 36 14 cannot
  • 什么时候返回结构体指针是个好主意?

    我正在学习 Go 我对何时使用指针有点困惑 具体来说 当返回一个struct从函数中 什么时候适合返回结构体实例本身 什么时候适合返回指向结构体的指针 示例代码 type Car struct make string model strin
  • 在复杂的文件夹结构中进行测试

    我正在 golang 中构建一个设计模式存储库 为了运行所有测试 我使用这个 bash 脚本 有用 bin bash go test creational abstract factory go go test creational bui

随机推荐

  • 如何使用 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