分享go的一些东西

发布时间 2023-12-05 16:06:33作者: 饮冰而行
  1. 使用值为nilslicemap会发生什么?

  在nil切片中添加元素成功。在nilmap中添加会panic,因为map没有分配实际内存。为空的切片底层数组的指针为nil,但是lencap都是0,当append时,go会自动分配新的底    层数组。

  2.访问mapkey需要注意什么?

  当访问map中不存在的key时,go会返回元素对应数据类型的零值:nil或者false0.所以取值操作总有值返回,不能通过取出来的值来判断key是不是map中。

  3.string类型可以修改吗?

  不可以,底层是二进制byte。非要修改可以将string[]byte数组,修改数字后再转string就行。

  4.Makenew的区别?

  两个不同的内置函数,都可用用来创建新的变量。New用来创建类型的指针,返回指针变量指向零值;make用于创建类型的值,返回该类型的非零值(一般来创建切片,映射,通道)

  (不同)New可以创建任意类型变量,make只能创建引用类型变量。New返回的是指针,make返回的是初始化的值。New创建变量的默认值是0make要看变量类型。

  5.Javago的区别?

  ① 特点:java是面向对象语言(封装,继承,多态),使用类和对象来组织代码。Go是静态语言,也可以实现面向对象的特点,而且没有分号。

  ② 并发:,go有协程,通过channel来通信,java通过线程和锁来实现并发,需要手动操作。

  ③ 性能:go专门为高并发而生,GOGC机制也很高效。

  ④ 生态:java的生态更加强大,有很多框架和库,而go的生态比较小,但也在迅速发展。

  6.Go值接收与指针接收区别?

  方法可以给用户自定义类型添加新行为,与函数的区别,主要有一个接收者。调用方法时接收者既可以是值类型,也可以是指针类型。

  方法调用时,值类型可以调用值接收者和指针接收者。指针类型也可以调用值接收和指针接收方法。

  如果方法接收值是值类型,无论调用者是对象还是指针,修改的都只是对象的副本,不影响调用者;如果方法的接受值是指针类型,则调用者修改的是指针指向的对象本身。

  使用指针做接收者的原因:方法可以修改接收者指向的值,避免每次调用方法都复制该值(大型结构体时,会更高效)

  7.Go的类型转化与断言的区别?

  他俩本质都是把一个类型转换成另一个类型,类型断言是对接口变量进行操作的。

  类型转换:转换前后两个类型要互相兼容,类型转换在编译期就完成的,并且静态类型检查通过为前提。

  断言:将一个接口类型的值转化成其他类型的值。