草庐IT

generic-collections

全部标签

garbage-collection - 零长度和零上限 slice 是否仍然指向底层数组并防止垃圾收集?

让我们假设以下场景:a:=make([]int,10000)a=a[len(a):]正如我们从“GoSlices:UsageandInternals”中了解到的那样,在下slice中存在一个“可能的问题”。对于任何slicea如果你执行a[start:end]它仍然指向原始内存,所以如果你不复制,一个小的下slice可能会保留一个非常大的数组在内存中保存了很长时间。但是,选择这种情况会导致slice不仅应该具有零长度,而且应该具有零容量。对于构造a=a[0:0:0]可以提出类似的问题。当前的实现是否仍然维护一个指向底层内存的指针,以防止它被垃圾收集,或者它是否认识到没有len或cap的

garbage-collection - 零长度和零上限 slice 是否仍然指向底层数组并防止垃圾收集?

让我们假设以下场景:a:=make([]int,10000)a=a[len(a):]正如我们从“GoSlices:UsageandInternals”中了解到的那样,在下slice中存在一个“可能的问题”。对于任何slicea如果你执行a[start:end]它仍然指向原始内存,所以如果你不复制,一个小的下slice可能会保留一个非常大的数组在内存中保存了很长时间。但是,选择这种情况会导致slice不仅应该具有零长度,而且应该具有零容量。对于构造a=a[0:0:0]可以提出类似的问题。当前的实现是否仍然维护一个指向底层内存的指针,以防止它被垃圾收集,或者它是否认识到没有len或cap的

garbage-collection - 垃圾收集/链表

垃圾收集器(理论上)会收集这样的结构吗?packagemaintypenodestruct{next*nodeprev*node}func(a*node)append(b*node){a.next=bb.prev=a}funcmain(){a:=new(node)b:=new(node)a.append(b)b=nila=nil}这应该是一个链表。a指向b,b指向a。当我删除a和b(最后两行)中的引用时,这两个节点将无法再访问。但是每个节点仍然有一个引用。尽管如此,go垃圾收集器是否会删除这些节点?(显然不是在上面的代码中,而是在运行时间更长的程序中)。是否有任何关于处理这些问题的垃圾

garbage-collection - 垃圾收集/链表

垃圾收集器(理论上)会收集这样的结构吗?packagemaintypenodestruct{next*nodeprev*node}func(a*node)append(b*node){a.next=bb.prev=a}funcmain(){a:=new(node)b:=new(node)a.append(b)b=nila=nil}这应该是一个链表。a指向b,b指向a。当我删除a和b(最后两行)中的引用时,这两个节点将无法再访问。但是每个节点仍然有一个引用。尽管如此,go垃圾收集器是否会删除这些节点?(显然不是在上面的代码中,而是在运行时间更长的程序中)。是否有任何关于处理这些问题的垃圾

generics - 使两个相似的函数通用

这个问题在这里已经有了答案:GenericFunctionsinGo(3个答案)关闭6个月前。我在Go中有两个功能几乎相同。他们获取一片具有“ID”字段的结构,并将其重新排序到由该字段索引的映射中。然后他们将其附加到另一个结构的字段,该结构也由ID标识。这两个函数做同样的事情,但附加到结构中的两个不同字段。我想让这些方法通用,但我不确定该怎么做。我希望它可以使用指针来完成,但我不确定如何。函数一:funcaddPremiereDatesToMovies(m[]Movie,pd[]PremiereDate)([]Movie,error){pds:=make(map[int64][]Pre

generics - 使两个相似的函数通用

这个问题在这里已经有了答案:GenericFunctionsinGo(3个答案)关闭6个月前。我在Go中有两个功能几乎相同。他们获取一片具有“ID”字段的结构,并将其重新排序到由该字段索引的映射中。然后他们将其附加到另一个结构的字段,该结构也由ID标识。这两个函数做同样的事情,但附加到结构中的两个不同字段。我想让这些方法通用,但我不确定该怎么做。我希望它可以使用指针来完成,但我不确定如何。函数一:funcaddPremiereDatesToMovies(m[]Movie,pd[]PremiereDate)([]Movie,error){pds:=make(map[int64][]Pre

generics - Go(语言)通用数字类型/接口(interface)

这个问题在这里已经有了答案:Howtowriteagenericfunctionthatacceptsanynumericaltype?(2个答案)关闭5个月前。我正在尝试用Go编写一个包,使用“通用”类型计算方程。具体来说,我想实现rungekutta5近似。此近似计算(未知)函数y在点t0+h的值,仅使用y在t0、开始时间t0、步长h和dgl形式的微分方程>dy/dt=g(t,y)其中g是某个函数。此近似值在处理标量类型时与处理向量(甚至矩阵)时的行为完全相同。更一般地说:它适用于可以添加/减去相同类型的值并且可以通过标量缩放的所有内容(为此我使用float64)所以我试图将其表达

generics - Go(语言)通用数字类型/接口(interface)

这个问题在这里已经有了答案:Howtowriteagenericfunctionthatacceptsanynumericaltype?(2个答案)关闭5个月前。我正在尝试用Go编写一个包,使用“通用”类型计算方程。具体来说,我想实现rungekutta5近似。此近似计算(未知)函数y在点t0+h的值,仅使用y在t0、开始时间t0、步长h和dgl形式的微分方程>dy/dt=g(t,y)其中g是某个函数。此近似值在处理标量类型时与处理向量(甚至矩阵)时的行为完全相同。更一般地说:它适用于可以添加/减去相同类型的值并且可以通过标量缩放的所有内容(为此我使用float64)所以我试图将其表达

garbage-collection - 有没有一种安全的方法可以使用 CGo 从 C 代码中保留对 Go 变量的引用?

当使用CGo将C代码与Go交互时,如果我在C端保留对Go变量的引用,我是否会冒着该对象被垃圾收集器释放的风险,或者GC是否会在C端管理的变量?为了说明我的要求,请考虑以下示例程序:去代码:packagemain/*typedefstruct_FooFoo;Foo*foo_new(void);voidfoo_send(Foo*foo,intx);intfoo_recv(Foo*foo);*/import"C"//exportmakeChannelfuncmakeChannel()chanint{returnmake(chanint,1)}//exportsendIntfuncsendIn

garbage-collection - 有没有一种安全的方法可以使用 CGo 从 C 代码中保留对 Go 变量的引用?

当使用CGo将C代码与Go交互时,如果我在C端保留对Go变量的引用,我是否会冒着该对象被垃圾收集器释放的风险,或者GC是否会在C端管理的变量?为了说明我的要求,请考虑以下示例程序:去代码:packagemain/*typedefstruct_FooFoo;Foo*foo_new(void);voidfoo_send(Foo*foo,intx);intfoo_recv(Foo*foo);*/import"C"//exportmakeChannelfuncmakeChannel()chanint{returnmake(chanint,1)}//exportsendIntfuncsendIn