【Golang 面试题】每日 3 题(六)

✍个人博客:Pandaconda-CSDN博客

📣专栏地址:http://t.csdnimg.cn/UWz06

📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~

❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

16. Printf(),Sprintf(),FprintF() 都是格式化输出,有什么不同?

在 Go 语言中,Printf()、Sprintf() 和 FprintF() 都是用于格式化输出的函数,但它们有一些不同之处,具体如下:

  1. Printf()

Printf() 是最常用的格式化输出函数,它将格式化后的字符串输出到标准输出流(一般是终端窗口)。Printf() 的

语法如下:

go 复制代码
Printf(format string, a ...interface{}) (n int, err error)

其中,format 表示要输出的格式化字符串,a ...interface{} 表示要格式化的参数列表,可以是任意类型的参数。

Printf() 函数会根据格式化字符串中的格式说明符将参数格式化为指定格式,并输出到标准输出流中。

  1. Sprintf()

Sprintf() 与 Printf() 的作用类似,不同的是,它将格式化后的字符串输出到一个字符串中,而不是标准输出流。Sprintf() 的语法如下:

go 复制代码
Sprintf(format string, a ...interface{}) string

其中,format 和 a ...interface{} 的含义与 Printf() 相同,但 Sprintf() 返回一个字符串,而不是将格式化后的字符串输出到标准输出流中。

  1. FprintF()

FprintF() 与 Printf() 的作用也类似,不同的是,它将格式化后的字符串输出到指定的文件中,而不是标准输出流。FprintF() 的语法如下:

go 复制代码
FprintF(w io.Writer, format string, a ...interface{}) (n int, err error)

其中,w 表示要输出的文件,可以是 os.Stdout、os.Stderr 或其他实现了 io.Writer 接口的类型。format 和 a ...interface{} 的含义与 Printf() 相同。FprintF() 会将格式化后的字符串输出到指定的文件中。

综上所述,Printf()、Sprintf() 和 FprintF() 都是格式化输出函数,它们的作用有所不同,但都可以通过格式说明符将参数格式化为指定格式。需要根据具体的需求选择不同的函数来使用。

17. Golang 的参数传递、引用类型

在 Golang 中,函数调用时参数传递可以分为值传递和引用传递。

值传递:将参数的值复制一份,然后将复制的值传递给函数,函数对参数的修改不会影响到原始的值。常见的值类型如 int、float、bool 等都是值类型,它们的传递都是值传递。

引用传递:将参数的地址复制一份,然后将复制的地址传递给函数,函数对参数的修改会影响到原始的值。常见的引用类型如 Slice、Map、Channel、指针等都是引用类型,它们的传递都是引用传递。

需要注意的是,在 Golang 中数组虽然是引用类型,但是它的传递却是值传递。这是因为 Golang 的数组长度是固定的,数组的值复制时会将整个数组的元素都复制一遍,因此传递数组时的开销较大,而且数组的长度也不可变,因此将数组的地址复制一份也无法修改原数组的长度,所以 Golang 采用了值传递的方式。

总之,对于值类型的参数,使用值传递即可;对于引用类型的参数,使用引用传递可以避免大量数据的复制,提高程序的效率。同时,在使用引用类型的参数时,需要注意并发访问的问题。

18. Go 语言当中值传递如何运用?

值传递是指函数参数传递时,传递的是值的拷贝,而不是原始值的引用。在函数中修改参数的值并不会影响原始值。在 Go 语言中,基本数据类型、数组和结构体等类型都是以值的形式传递的。

示例代码:

go 复制代码
func main() {
    a := 10
    fmt.Println("Before calling function, a is:", a)
    changeValue(a)
    fmt.Println("After calling function, a is:", a)
}

func changeValue(n int) {
    n = 20
    fmt.Println("In function, n is:", n)
}

输出结果:

复制代码
Before calling function, a is: 10
In function, n is: 20
After calling function, a is: 10

可以看到,虽然在函数 changeValue() 中修改了参数 n 的值,但原始值 a 并未被修改。

相关推荐
酷炫码神7 分钟前
Day 10|Pinia 状态管理:把散落在各组件的数据,收进一个全局仓库
android·开发语言·javascript
microrain8 分钟前
SagooIoT 的缓存换后端只改一行配置,文件后端连 Redis 都不需要
物联网·缓存·golang·sagooiot
ss27342 分钟前
AI时代首先数据库-PostgreSQL实战笔记 | 22 PostgreSQL实例与集群
数据库·笔记·postgresql
ss27342 分钟前
AI时代首先数据库-PostgreSQL实战笔记 | 21 PostgreSQL进程与内存架构介绍
数据库·笔记·postgresql
Elastic 中国社区官方博客1 小时前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
tyn1881 小时前
记录本地安装nacos服务的方法及异常
java·开发语言
步行cgn2 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
y1su2 小时前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
喵了几个咪2 小时前
GoWind ShortPlay 深度拆解:三服务 BFF + Core,一条请求的完整工程链路
golang·gowind
传奇开心果编程2 小时前
【Rust入门练中学】第5课:引用与借用
开发语言·rust·引用·编程语言理论·通用编程语言·借用