百科狗-知识改变命运!
--

golang函数返回slice和返回 slice的指针有什么区别

泡在奶味里11个月前 (12-05)阅读数 15#综合百科
文章标签数组字符串

按照你的定义,slice是切片,而p是指针。切片是一个结构体头部+数组区域,其头部结构定义如下:

struct Slice

{ // must not move anything

byte* array; // actual data

uintgo len; // number of elements

uintgo cap; // allocated number of elements

};

因此,slice的返回其实是头部值返回,函数内外的地址是不同的,这也导致主程序中,ss与pp不同。因为ss是新分配的,pp则是与子程序testInterface中的&slice相同。简单修改你的代码,通过输出对比,会非常清晰:

golang函数返回slice和返回 slice的指针有什么区别

package main

import (

"fmt"

)

func testInterface() (slice interface{}, p interface{}) {

slice = make([]int, 10)

p = &slice

fmt.Println("debug:testInterface")

fmt.Println(&slice)//两个地址应该相同

fmt.Println(p) //两个地址应该相同

return slice, p

}

func main() {

fmt.Println("debug:main")

ss, pp := testInterface()

fmt.Println(&ss)

fmt.Println(pp) //应该与子程序的输出一致

}

另外,第一个问题就不用多解释,依然是值和指针不同了。

你是不是也很烦,记不住 slice() 和 splice() 的用法,隔一段时间,再用时就得翻文档。比如说:

本文将会介绍这些内容,如果没时间或直接看结论的,请滑动鼠标至文末。

语法如下:

begin 和 end 都是可选的。返回一个新的数组,是由 begin 和 end 决定的原数组的浅拷贝(包括 begin ,不包括 end )。 通俗地讲,就是截取原数组的一部分,并返回截取部分,且“不改变”原数组

总结一下:

请看示例:

字符串也有一个类似的方法: String.prototype.slice() ,它用来提取字符串的某一部分,并返回一个新的字符串,且不会改变原字符串。语法如下:

应用场景:

讲真的,它跟 slice() 长得像不说,还容易混淆,隔一段时间不用,都得翻一下文档确认一下。

语法如下:

所有参数都是可选的。从 MDN 上的表述看,参数 start 应该不能缺省的,但实际并不会报错,因此可认为是全可选的。 splice() 返回被删除的元素所组成的一个新数组,若没有删除,则返回空数组( [] )

简单总结一下:

请看示例:

顺道提一下,其实 split() 这个就很简单了,常用于字符串转为数组、解析 URL 参数等场景。

在字符串与数字切换,常用到 String.prototype.split() 、 Array.prototype.join() 、 Array.prototype.reverse() 方法。

语法如下:

参数 separator 和 limit 都是可选的。若缺省 separator 时,返回的数组包含一个由整个字符串组成的元素。而 limit 的作用是返回分割片段的数量。

separator 可以是字符串,也可以为正则表达式,它适合提取一些不太规则的字符串。

假设有以下两个字符串,我们要把月份提取出来,并返回数组:

本文,主要是讲解 slice() 和 splice() 方法及其区别。好吧,面试官也喜欢问这俩货。

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)