前端面试题库

调用函数传入结构体时,应该传值还是指针

go指针更新时间:2024-09-03 15:30:41

答案

直接说结论:go 的函数参数传递都是值传递(无论传值还是指针)

值类型、引用类型

值类型:变量和变量的值存在同一个位置;

引用类型:变量和值存在不同的位置,变量存储的是值的地址;比如go里的 map、slice、chan是引用类型;

值传递、指针传递

值传递:就是函数在调用时将实际参数复制一份传递到函数中,函数内对值进行的任何操作都不会影响到实际参数;

指针传递:函数调用时将实际参数的地址传递到函数中,函数内对参数进行的修改将影响实际参数;

最后

go函数在传递参数时都会将参数复制一份,不过值传递复制的是值本身,指针传递是将地址复制一份,本质上都是对变量存储位置的数据执行了复制操作;

具体使用哪种方式传递,可从一下方面考虑:

  1. 结构体的大小:如果结构体比较大,使用指针传递效率高,因为只需要复制地址即可,而不是结构体本身;否则传值和传指针性能差异不大;
  2. 是否需要原始结构体:如果需要在函数中修改原始结构体的,那么使用指针;

评论