登录
首页 >  Golang >  Go问答

为什么需要使用指针来传递 Go bytes.Buffer 到另一个函数?

来源:stackoverflow

时间:2024-03-05 12:45:21 291浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《为什么需要使用指针来传递 Go bytes.Buffer 到另一个函数?》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

在下面的代码中,write_commas 要求 buffer 参数是一个指针。它有效。

替代方案(即不使用指针)会导致空白输出。

为什么传递实际的 bytes.buffer 无法打印任何内容?或者换句话说,传递实际的 bytes.buffer 是否会创建一个副本,从而将字节写入没有任何内容读取的缓冲区?

package main

import (
    "fmt"
    "bytes"
)

func main() {
    s := "1234567898"
    fmt.Println(Comma(s))

}

func Comma(s string) string {
    var buf bytes.Buffer  // <-- bytes.Buffer declared here.
    sbytes := []byte(s)
    decimal := bytes.LastIndex(sbytes,[]byte("."))
    if decimal > 0 {
        whole_part := sbytes[:decimal]
        write_commas(whole_part, &buf)  // <-- Address

        float_part := sbytes[decimal:len(sbytes)]
        for i := len(float_part); i > 0; i-- {
            buf.WriteByte(float_part[len(float_part)-i])
        }
    } else {.
        write_commas(sbytes, &buf)  // <-- Address
    }

    return buf.String()
}

func write_commas(byr []byte, buf *bytes.Buffer) { // <-- Why *bytes.Buffer?
    for i := len(byr); i > 0; i-- {
        buf.WriteByte(byte(byr[len(byr)-i]))
        if i > 1 && (i-1) % 3 == 0 {
            buf.WriteByte(',')
        }
    }
}

解决方案


每当您将参数传递给函数时,它都会在该函数内创建一个本地副本。当您传递指针时,函数会收到指针的副本,该副本指向相同的基础值。因此,如果传递指针,函数可以影响它指向的值,调用者随后将看到该值。如果您传递值的副本(而不是传递指针),则该函数正在操作该副本,这对调用者自己的副本没有影响。

到这里,我们也就讲完了《为什么需要使用指针来传递 Go bytes.Buffer 到另一个函数?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>