青岛网站设计企业,网页设计背景,如何开通微信小程序商城,3合1网站建设公司✍个人博客#xff1a;Pandaconda-CSDN博客 #x1f4e3;专栏地址#xff1a;http://t.csdnimg.cn/UWz06 #x1f4da;专栏简介#xff1a;在这个专栏中#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话#xff0c;欢迎点赞#x1f44d;收藏… ✍个人博客Pandaconda-CSDN博客 专栏地址http://t.csdnimg.cn/UWz06 专栏简介在这个专栏中我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话欢迎点赞收藏您的支持就是我创作的最大动力 16. Printf()Sprintf()FprintF() 都是格式化输出有什么不同
在 Go 语言中Printf()、Sprintf() 和 FprintF() 都是用于格式化输出的函数但它们有一些不同之处具体如下
Printf()
Printf() 是最常用的格式化输出函数它将格式化后的字符串输出到标准输出流一般是终端窗口。Printf() 的 语法如下
Printf(format string, a ...interface{}) (n int, err error)其中format 表示要输出的格式化字符串a …interface{} 表示要格式化的参数列表可以是任意类型的参数。 Printf() 函数会根据格式化字符串中的格式说明符将参数格式化为指定格式并输出到标准输出流中。
Sprintf()
Sprintf() 与 Printf() 的作用类似不同的是它将格式化后的字符串输出到一个字符串中而不是标准输出流。Sprintf() 的语法如下
Sprintf(format string, a ...interface{}) string其中format 和 a …interface{} 的含义与 Printf() 相同但 Sprintf() 返回一个字符串而不是将格式化后的字符串输出到标准输出流中。
FprintF()
FprintF() 与 Printf() 的作用也类似不同的是它将格式化后的字符串输出到指定的文件中而不是标准输出流。FprintF() 的语法如下
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 语言中基本数据类型、数组和结构体等类型都是以值的形式传递的。
示例代码
func main() {a : 10fmt.Println(Before calling function, a is:, a)changeValue(a)fmt.Println(After calling function, a is:, a)
}func changeValue(n int) {n 20fmt.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 并未被修改。