gpt4 book ai didi

go - 为什么下面的 Go 程序需要函数的名称是 String() 而不是其他任何东西?

转载 作者:数据小太阳 更新时间:2023-10-29 03:30:16 26 4
gpt4 key购买 nike

我正在关注一本书,其中显示了以下示例。

package main

import (
"fmt"
)

const (
KB = 1024
MB = 1048576 //KB * 1024
GB = 1073741824 //MB * 1024
TB = 1099511627776 //GB * 1024
PB = 1125899906842624 //TB * 1024
)

type ByteSize float64

func (b ByteSize) String() string {
switch {
case b >= PB:
return "Very Big"
case b >= TB:
return fmt.Sprintf("%.2fTB", b/TB)
case b >= GB:
return fmt.Sprintf("%.2fGB", b/GB)
case b >= MB:
return fmt.Sprintf("%.2fMB", b/MB)
case b >= KB:
return fmt.Sprintf("%.2fKB", b/KB)
}
return fmt.Sprintf("%dB", b)
}

func main() {
fmt.Println(ByteSize(2048))
fmt.Println(ByteSize(3292528.64))
}

当我运行这个程序时,它会给我以下输出(以人类可读的数据大小为单位)。

2.00KB
3.14MB

但是当我将名为 String() 的函数的名称更改为其他任何名称时,或者如果我将 String 中的 S 小写,它会给出以下输出。

2048
3.29252864e+06

这背后的原因是什么?是否有一些 String() 函数附加到某个接口(interface)并且我们的 ByteSize 类型满足该接口(interface)?我到底是什么意思?

最佳答案

你的最后一句话是完全正确的。在 Go 中,您可以满足您甚至不知道存在的接口(interface)。你可以为其他人的功能编写新的接口(interface)。他们的代码不必编写“实现”或派生或任何东西。它完全基于函数名称并具有匹配的参数和返回值列表。

关于go - 为什么下面的 Go 程序需要函数的名称是 String() 而不是其他任何东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46147978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com