安全的Go语言从源数组构建目标Slice

今天在QQ群里聊到GO语言需要改进的地方,快乐的吐槽了一番。我之前最希望用数组构建slice的语法变更一下,因为现在流行的[start:end]方式并不严谨。后来不记得是哪个版本的时候,引入了三段式的[start:end:max]语法来创建slice。这样是安全了,但是确丑了很多。

如下例所示,二段式的定义在append操作后会污染到源数组:

    a := [5]int{1, 2, 3, 4, 5}
    s1 := a[1:3:3]
    s2 := a[1:3]
    _ = append(s1, 6)
    fmt.Println(a)  //out:[1 2 3 4 5]
    _ = append(s2, 7)
    fmt.Println(a)  //out:[1 2 3 7 5]

关于对new函数的改进,chai大帮我发到了邮件组,感谢chai大。

时间: 2024-08-08 09:35:17

安全的Go语言从源数组构建目标Slice的相关文章

C语言基础:数组作为函数参数传递演示源码

将做工程过程中常用的内容片段记录起来,如下内容内容是关于C语言基础:数组作为函数参数传递演示的内容,应该能对小伙伴也有好处. #include <stdio.h> void show_array(int values[], int number_of_elements) { int i; printf("About to display %d valuesn", number_of_elements); for (i = 0; i < number_of_elemen

c语言memset源码

c语言memset源码 一.用法 void *memset(void *s, int ch, size_t n);作用:将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作.不知道有没有像我一样把memset当作万能的初始化工具,例如:int arr[n];memset(arr,1,n*sizeof(int));这样得到的arr数组一定不是全0,而是16843009,下面解释原因.首先,变量类型的本质只是标志

C语言变长数组 struct中char data[0]的用法

版权声明:本文为博主原创文章,未经博主允许不得转载. [cpp] view plain copy print? 今天在看一段代码时出现了用结构体实现变长数组的写法,一开始因为忘记了这种技术,所以老觉得作者的源码有误,最后经过我深思之后,终于想起以前看过的用struct实现变长数组的技术.下面是我在网上找到的一篇讲解很清楚的文章. 在实际的编程中,我们经常需要使用变长数组,但是C语言并不支持变长的数组.此时,我们可以使用结构体的方法实现C语言变长数组. struct MyData { int nL

c语言,动态数组

试着直接malloc一个2*3*4的空间来模拟数组: #include <stdio.h> #include <malloc.h> int main(void) { int*** pArr = NULL; pArr = (int ***)malloc(2*3*4*sizeof(int)); if(pArr == 0) { return -1; } memset(pArr, 0, 2*3*4*sizeof(int)); pArr[0][0][1] = 11; printf("

Docker实用技巧之更改软件包源提升构建速度

一.开篇 地球,中国,成都市,某小区的阳台上,一青年负手而立,闭目沉思,阵阵的凉风吹得他衣衫呼呼的飘.忽然,他抬起头,刹那间,睁开了双眼,好似一到精光射向星空,只见这夜空......一颗星星都没有.他叹了下气,"今日夜观星象,看来是时候了."他走到电脑桌前,双手不断的做出各种手势,同时口中念着晦涩难懂的语言--嘛咪嘛咪哄,最后只见他将一只手放在了笔记本电脑上,同时大喊:"出来吧!我的皮卡丘.",只见贴在笔记本电脑上的一张泛黄的写着奇怪文字和图案的纸在燃烧,好像在进行

C语言中的数组的一些笔记

C语言是面向过程的语言. 计算数组长度: Int count =sizeof(ages)/sizeof(int); C语言里面输出字符串,必须以'\0'结束,如果没有则一直执行下去. Char name []="why";//这种情况下末尾自动加了'\0' strlen(name );//输出结果就是8 strlen函数计算长度时不算'\0' ------------------------------------------------------------------------

用linux源码构建xen的domU

linux源码版本linux-3.14,可以从https://www.kernel.org/获取. 由于已经有了dom0(fedora19),现在需要安装domU,domU可以用xen源码自带的miniOS,这个os是xen客户机的最小系统,有机会一定安装一下试试.这次我配置安装的是linux. 参考xen的wiki页 http://wiki.xenproject.org/wiki/Mainline_Linux_Kernel_Configs Configuring the Kernel for

C 语言变长数组 struct 中 char data[0] 的用法

1.结构体内存布局(padding) 为了让CPU能够更舒服地访问到变量,struct中的各成员变量的存储地址有一套对齐的机制.这个机制概括起来有两点:第一,每个成员变量的首地址,必须是它的类型的对齐值的整数倍,如果不满足,它与前一个成员变量之间要填充(padding)一些无意义的字节来满足:第二,整个struct的大小,必须是该struct中所有成员的类型中对齐值最大者的整数倍,如果不满足,在最后一个成员后面填充. The following typical alignments are va

C语言二维数组作为函数的参数

前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: #include <cstdio> void print(int *a[3]) { printf("%d\n",a[0][0]); } int main() { int a[2][3] = {1,2,3,4,5,6}; print(a); return 0; } 编译程序时候,在第10行提示错误信息:|