golang 在go中创建一个字节数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang 在go中创建一个字节数组相关的知识,希望对你有一定的参考价值。

package main

import "fmt"

func bytearr(amount int) []byte {
	return make([]byte, 5)
}

func main() {
	arr := bytearr(7)
	arr[0] = 100
	arr = append(arr, 56)
  fmt.Println(arr)
  //[100 0 0 0 0 56]
}

在golang中创建对象后如何确保使用方法?

【中文标题】在golang中创建对象后如何确保使用方法?【英文标题】:How to make sure that a method is used after an object is created in golang? 【发布时间】:2016-08-17 23:56:31 【问题描述】:

我有一个struct,我有一个我编写的new 方法,它生成对象并返回它的指针。

现在我还有另一个方法,例如Close,但到目前为止,一旦创建对象,就不必调用此方法。我想确保在创建对象时必须调用此方法。我如何在 Golang 中做到这一点?如果这是可能的,我也不知道这叫什么。请帮忙。谢谢。

【问题讨论】:

【参考方案1】:

没有办法强制调用Close() 方法。您能做的最好的事情就是清楚地记录下,如果不再需要您的类型的值,则必须调用其 Close() 方法。

在程序被强制终止的极端情况下,你无法保证任何代码都会运行。

请注意,有一个runtime.SetFinalizer() 函数允许您注册一个函数,当垃圾收集器发现一个值/块无法访问时将调用该函数。但是要知道,不能保证您注册的函数会在程序退出之前运行。引用其文档:

无法保证终结器会在程序退出之前运行,因此它们通常仅用于在长时间运行的程序期间释放与对象关联的非内存资源。

您可以选择不导出您的类型,并提供一个导出的构造函数,如NewMyType(),您可以在其中正确初始化您的结构/类型。你不能强迫别人在用完你的值后调用它的Close()方法,但至少你可以不用担心初始化不当。

【讨论】:

谢谢。不仅仅是析构函数,如果有像object.run()这样的方法,它设置了一些变量,没有它,对象可能会抛出一些零指针错误,有没有办法强制用户使用.run()方法? 完美@icza,非常感谢。【参考方案2】:

简而言之,在go中是不可能的。

您正在寻找的术语是 Go 没有实现的析构函数。欲了解更多信息,请在此处阅读出色的答案:Go destructors?

【讨论】:

以上是关于golang 在go中创建一个字节数组的主要内容,如果未能解决你的问题,请参考以下文章

Golang 不能用作类型结构数组或切片文字

我可以在 Golang 中创建一个类型的别名吗?

Golang入门到项目实战 第一个golang应用

go语言-golang基础-数据类型数组,数组切片,映射

Golang使用Elasticsearch

golang内建变量类型