go语言面试题大全 golang面试题目背诵
golang-101-hacks(12)——切片作为函数参数传递
1、在Go语言中,函数参数是值传递。使用slice作为函数参数时,函数获取到的是slice的副本:一个指针,指向底层数组的起始地址,同时带有slice的长度和容量。既然各位熟知数据存储的内存的地址,现在可以对切片数据进行修改。
创新互联公司是专业的安新网站建设公司,安新接单;提供网站设计、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行安新网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
2、slice通过数组实现,类似一个结构体,其中一个字段保存的是底层数组的地址,还有长度(len) 和 容量(cap)两个字段。
3、当切片和数组作为参数在函数(func)中传递时,数组传递的是值,而切片传递的是指针。因此当传入的切片在函数中被改变时,函数外的切片也会同时改变。相同的情况,函数外的数组则不会发生任何变化。
4、著名的map[string]*struct 副本问题 结果:Go 中不存在引用传递,所有的参数传递都是值传递,而map是等同于指针类型的,所以在把map变量传递给函数时,函数对map的修改,也会实质改变map的值。
5、作为类型和作为变量的区别在于: 函数作为类型时,它只是一个函数类型的定义,没有具体实现代码。可以看作是一种数据类型,用于描述函数的参数和返回值类型。 函数作为变量时,它是一个实际的函数,具有实现代码。
6、golang 有三个常用的高级类型 slice、map、channel, 它们都是 引用类型 ,当引用类型作为函数参数时,可能会修改原内容数据。 golang 中没有引用传递,只有值和指针传递。
golang面试题2之判断字符串中字符是否全都不同
第二种解法是通过构建一个布尔值的数组,索引 index 表示ASCII码中值为 index的字符。将初值置为 False ,如果某个元素第二次出现,则表示这个字符串出现了重复的字符,函数直接返回。
实现一个算法,确定一个字符串的所有字符是否全都不同。假设不允许使用额外的数据结构。解题:首先我们假设这个字符串中全都是ASCII字符(如果不是需要另外讨论了)。
因此这题可以用一个大小为256的数组,遍历字符串时把对应的个数记录在数组里,数组某一项数字超过1那么就表示有重复字符了。
实现一个算法,确定一个字符串 s 的所有字符是否全都不同。
没有类,C语言有结构体,那么Go的结构体有什么特别之处?
作为C语言家族的一员,go和c一样也支持结构体。可以类比于java的一个POJO。在学习定义结构体之前,先学习下定义一个新类型。
C语言中的结构体可以定义一些复杂数据类型,把一些有内在联系的不同变量放在一起封装成一个整体,这就是结构体。例如:以学生为例,学生存在学号,姓名,性别,班级等。
1 C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。
于c语言相同,go中也有指针和结构体的概念。指针表示变量的内存地址,结构体用来存储同一类型的数据。定义一个指针变量,将变量a的地址赋给指针变量p。这样,指针变量p也就指向了变量a所在的内容空间。
结构体可以定义一些复杂数据类型,比如我要定义一个员工信息的结构体,就可以在结构体里添加员工编号、姓名、工资、地址、出生日期、电话等信息,有了结构体给编程带来很大的方便。
主要来说:1)C的结构体不存在继承接口和构造函数等,但是C#的结构可以继承接口,以及有必须带参数的构造函数。2)C的结构体没有属性,缺省情况下变量直接暴露在外边被访问;C#还可以为变量提供属性访问。
标题名称:go语言面试题大全 golang面试题目背诵
地址分享:http://myzitong.com/article/dcpspcj.html