小编use*_*ser的帖子

Go中结构的堆栈与堆分配,以及它们与垃圾收集的关系

我是Go的新手,我在C风格的基于堆栈的编程之间经历了一些不协调的错误,其中自动变量存在于堆栈上,并且在堆上分配了内存,以及基于Python的基于堆栈的编程,其中只有堆栈上的东西才是堆上对象的引用/指针.

据我所知,以下两个函数提供相同的输出:

func myFunction() (*MyStructType, error) {
    var chunk *MyStructType = new(HeaderChunk)

    ...

    return chunk, nil
}


func myFunction() (*MyStructType, error) {
    var chunk MyStructType

    ...

    return &chunk, nil
}
Run Code Online (Sandbox Code Playgroud)

即分配一个新结构并返回它.

如果我在C中编写它,第一个将把一个对象放在堆上,第二个将它放在堆栈上.第一个将返回一个指向堆的指针,第二个将返回一个指向堆栈的指针,该指针在函数返回时会蒸发,这将是一件坏事.

如果我用Python(或除C#之外的许多其他现代语言)编写它,那么示例2是不可能的.

我得到Go垃圾收集两个值,所以上述两种形式都没问题.

报价:

请注意,与C不同,返回局部变量的地址是完全可以的.与函数关联的存储在函数返回后仍然存在.实际上,获取复合文字的地址在每次评估时都会分配一个新实例,因此我们可以将这两行结合起来.

http://golang.org/doc/effective_go.html#functions

但它提出了几个问题.

1 - 在示例1中,结构在堆上声明.例2怎么样?在堆栈中声明的方式与在C中的方式相同,还是在堆上也是如此?

2 - 如果在堆栈上声明了示例2,那么在函数返回后它是如何保持可用的?

3 - 如果实际上在堆上声明了示例2,那么结构是如何通过值而不是通过引用传递的?在这种情况下,指针有什么意义?

heap-memory go stack-memory

146
推荐指数
4
解决办法
3万
查看次数

为什么git不能通过路径进行硬/软复位?

$ git reset -- <file_path> 可以通过路径重置.

但是,$ git reset (--hard|--soft) <file_path>会报告如下错误:

Cannot do hard|soft reset with paths.
Run Code Online (Sandbox Code Playgroud)

git git-reset

123
推荐指数
5
解决办法
6万
查看次数

空HTML5数据属性是否有效?

我想写一个简单的jQuery插件,在指定的元素下显示内联模式.我的想法是让脚本根据元素上指定的数据属性进行自动初始化.

一个非常基本的例子:

<p data-modal-target>Hover over me for an inline modal!</p>
<div data-modal-content data-modal-align="right" data-modal-trigger="hover" data-modal-offset="10px"><!-- any desired syntax can go here --></div>
Run Code Online (Sandbox Code Playgroud)

我只是想知道data-modal-target在上面的例子中是否有效,或者它是否必须data-modal-target="true"?我不关心比IE9等更糟糕的东西,我唯一的要求是它是有效的HTML5.

html5 custom-data-attribute html5-data

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

如何防止flex项目因文本而溢出?

我有一个列表的以下布局.每个列表项由两列表示.第二列应占用所有可用空间,但如果第一列占用太多空间,则应以最小大小固定在右侧.然后第一列应显示省略号.

问题出现在最后一个案例中.当第一列包含太多文本而不是显示省略号时,它会将自身伸展到弹性框之外,从而导致出现水平滚动条,而第二列不会固定在右侧.

我希望它像这样呈现(模型):

预期渲染

我怎样才能做到这一点?

这是 样本小提琴.

.container {
    display: -webkit-flex;
}

div {
    white-space: nowrap;
    text-overflow: ellipsis;
}

.container > div:last-child {
    -webkit-flex: 1;
    background: red;
}
Run Code Online (Sandbox Code Playgroud)
<!-- a small first column; the second column is taking up space as expected -->
<div class="container">
    <div>foo barfoo bar</div>
    <div>foo bar</div>
</div>

<!-- a large first column; the first column is overflowing out of the flexbox container -->
<div class="container">
    <div>foo barfoo barfoo barfoo barfoo barfoo barfoo bar
    foo barfoo barfoo …
Run Code Online (Sandbox Code Playgroud)

css google-chrome css3 flexbox

68
推荐指数
2
解决办法
7万
查看次数

文件通常保存在浏览器的缓存中多长时间

文件通常保存在浏览器的缓存中多长时间?我想知道普通人群 - 我需要多长时间才能确定大多数人的缓存会重新获取文件?

browser-cache

39
推荐指数
1
解决办法
8万
查看次数

PHP CSV字符串到数组

我正在尝试将CS​​V字符串解析为PHP中的数组.CSV字符串具有以下属性:

Delimiter: ,
Enclosure: "
New line: \r\n
Run Code Online (Sandbox Code Playgroud)

示例内容:

"12345","Computers","Acer","4","Varta","5.93","1","0.04","27-05-2013"
"12346","Computers","Acer","5","Decra","5.94","1","0.04","27-05-2013"
Run Code Online (Sandbox Code Playgroud)

当我尝试解析它时:

$url = "http://www.url-to-feed.com";
$csv = file_get_contents($url);
$data = str_getcsv($csv);
var_dump($data);
Run Code Online (Sandbox Code Playgroud)

最后一个元素和一个元素串在一个字符串中:

[0]=> string(5) "12345"
...
[7]=> string(4) "0.04"
[8]=> string(19) "27-05-2013
"12346""
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?任何帮助,将不胜感激.

php csv parsing

39
推荐指数
4
解决办法
9万
查看次数

如何使用HTML5数据集删除data-*属性

根据数据集规范,element.dataset如何删除数据属性?考虑:

<p id="example" data-a="string a" data-b="string b"></p>
Run Code Online (Sandbox Code Playgroud)

如果你这样做:

var elem = document.querySelector('#example');
elem.dataset.a = null;
elem.dataset.b = undefined;
elem.dataset.c = false;
elem.dataset.d = 3;
elem.dataset.e = [1, 2, 3];
elem.dataset.f = {prop: 'value'};
elem.dataset.g = JSON.stringify({prop: 'value'});
Run Code Online (Sandbox Code Playgroud)

DOM在Chrome和Firefox中变成了这个:

<p id="example" 
   data-a="null" 
   data-b="undefined" 
   data-c="false" 
   data-d="3" 
   data-e="1,2,3" 
   data.f="[object Object]" 
   data.g="{"prop":"value"}"
></p>
Run Code Online (Sandbox Code Playgroud)

Chrome/Firefox实施模仿setAttribute.它基本上适用于.toString()第一.除了处理之外,这对我来说是有道理的,null因为我希望这null会删除属性.否则,数据集API如何执行以下操作:

elem.removeAttribute('data-a');
Run Code Online (Sandbox Code Playgroud)

那么布尔属性呢:

<p data-something>相当于<p data-something="">嗯.

javascript web-standards html5-data

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

如何使div的背景颜色半透明?

我只希望我的div中的白色背景颜色半透明大约50%.内容应该是完全不透明的.这样做的正确方法是什么?我想象当我查看背景CSS属性时,我会找到一个不透明度设置,但没有.不关心IE6.

更新:使用下面给出的rgba解决方案与 CSS3PIE的解决方案一起解决,以使rgba在IE浏览器中运行.

css opacity css3

31
推荐指数
3
解决办法
7万
查看次数

Python中的2D数组

在Python中创建2D数组的最佳方法是什么?

我想要的是存储这样的值:

X , Y , Z
Run Code Online (Sandbox Code Playgroud)

这样我就可以访问数据,X[2],Y[2],Z[2]或者X[n],Y[n],Z[n]在哪里n可变.我不知道一开始n会有多大,所以我想在最后添加值.

python arrays tuples list multidimensional-array

24
推荐指数
5
解决办法
15万
查看次数

如何将套接字重置回阻塞模式(在我将其设置为非阻塞模式后)?

关于将套接字设置为非阻塞模式,我已经读过这个.

http://www.gnu.org/software/libc/manual/html_mono/libc.html#File-Status-Flags

这是我做的:

static void setnonblocking(int sock)
{
    int opts;

    opts = fcntl(sock,F_GETFL);
    if (opts < 0) {
        perror("fcntl(F_GETFL)");
        exit(EXIT_FAILURE);
    }
    opts = (opts | O_NONBLOCK);
    if (fcntl(sock,F_SETFL,opts) < 0) {
        perror("fcntl(F_SETFL)");
        exit(EXIT_FAILURE);
    }
    return;
}
Run Code Online (Sandbox Code Playgroud)

如何将套接字设置回阻止模式?我没有看到O_BLOCK标志?

谢谢.

c sockets networking nonblocking blocking

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