小编Oli*_*ver的帖子

性能:切片结构与结构指针切片

我经常使用切片结构.这是一个这样的结构的例子:

type MyStruct struct {
    val1, val2, val3    int
    text1, text2, text3 string
    list                []SomeType
}
Run Code Online (Sandbox Code Playgroud)

所以我定义我的切片如下:

[]MyStruct
Run Code Online (Sandbox Code Playgroud)

假设我在那里有大约一百万个元素,我正在努力研究切片:

  • 我经常附加新元素.(元素总数未知.)
  • 我时不时地对它进行排序.
  • 我也删除元素(尽管没有添加新元素).
  • 我经常读取元素并传递它们(作为函数参数).
  • 元素本身的内容不会改变.

我的理解是,这导致了很多实际结构的混乱.另一种方法是创建一个指向结构的指针:

[]*MyStruct
Run Code Online (Sandbox Code Playgroud)

现在结构保持原样,我们只处理指针,我认为这些指针占用的空间较小,因此可以使我的操作更快.但是现在我给垃圾收集器做了很多工作.

  • 您是否可以提供何时直接使用结构以及何时使用结构指针的一般指导原则?
  • 我应该担心我离开GC的工作量有多少?
  • 复制结构与复制指针的性能开销是否可忽略不计?
  • 也许一百万元素并不多.当切片变得更大时(但当然仍然适合RAM),所有这些都会如何变化?

performance go slice

51
推荐指数
2
解决办法
3万
查看次数

d3.js v4:如何访问父组的基准索引?

selection.data函数的描述包括具有多个组(链接)的示例,其中二维数组被转换为HTML表.

在d3.js v3中,对于较低维度,访问器函数包括第三个参数,该参数是父组的数据的索引:

td.text(function(d,i,j) {
  return "Row: " + j;
});
Run Code Online (Sandbox Code Playgroud)

在v4中,该j参数已被选择的NodeList取代.如何立即访问父组的基准索引?

d3.js

22
推荐指数
2
解决办法
7909
查看次数

自v38起,Chrome扩展程序无法再从HTTP网址加载,解决方法?

我们网站的用户运行我们的Chrome插件,其中包括Chrome扩展程序开发页面中所述的XMLHttpRequest执行跨源请求.这已经运行了好几年了.但是,自从我们的用户升级到最新版本的Chrome(v38)后,这些请求都失败了.我们的网站使用HTTPS运行,并且通过我们的内容脚本加载的一些网址在HTTP上.消息是:

[已屏蔽]" https://www.ourpage.com/ "上的页面是通过HTTPS加载的,但是运行了来自" http://www.externalpage.com "的不安全内容:此内容也应通过HTTPS加载.

发生错误的报告行位于我发出HTTP调用的内容脚本中:

xhr.send(null);
Run Code Online (Sandbox Code Playgroud)

我无法控制外部页面,我宁愿不从我们自己的页面中删除SSL.问题:这是一个错误还是有一个我不知道的解决方法?

(注意:清单中的权限始终设置为<all_urls>已经工作了很长时间.将其设置为http://*/https://*/没有帮助.)

google-chrome xmlhttprequest cross-domain google-chrome-extension

15
推荐指数
1
解决办法
3万
查看次数

Golang Profiler找不到源代码

net/http/pprof在我的代码中包含了这个包.然后我可以轻松地运行pprof探查器(在Debian上):

go tool pprof http://localhost:9000/debug/pprof/profile
Run Code Online (Sandbox Code Playgroud)

诸如top10甚至生成调用图的命令按预期工作.但是,只要我尝试进入某个功能,它就会失败:

(pprof) list MyFunc
No source information for mypkg.MyFunc
Run Code Online (Sandbox Code Playgroud)

GOPATH被设置为我的项目目录.在构建源代码或运行pprof时,是否需要任何特殊标志或环境变量?

profiling go

10
推荐指数
1
解决办法
2864
查看次数

if语句中的struct初始化

我想检查结构是否为空,即它的所有字段是否都设置为默认值.以下按预期工作:

package main

import "fmt"

type MyStruct struct {
    field1 string
    field2 int
}

func main() {
    var mine MyStruct
    empty := MyStruct{}

    // Check if mine is empty.
    if mine == empty {
        fmt.Print("mine is empty")
    }
}
Run Code Online (Sandbox Code Playgroud)

我想缩短这一点,所以我将空结构初始化移动到if语句中:

func main() {
    var mine MyStruct

    // Check if mine is empty.
    if mine == MyStruct{} {
        fmt.Print("mine is empty")
    }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用:syntax error: unexpected }, expecting := or = or comma.即使以下情况也不起作用,尽管它看起来与第一个示例几乎相同:

func main() {
    var mine MyStruct …
Run Code Online (Sandbox Code Playgroud)

struct if-statement go

9
推荐指数
1
解决办法
2105
查看次数