![](/img/trans.png)
[英]How to define a type conversion from std::string to a custom type?
[英]How to define type conversion to string for a custom type
我可以定義如何使用String()
將轉換為字符串應用於我的自定義類型myint
嗎? 以及如何做到這一點?
我期望將方法String()
定義為足夠,因為它被fmt.Println()
使用,但顯然不是被string()
使用。 這純粹是一個理論問題,因為我正在學習 Go 並對這種行為感到驚訝。
這是一個顯示該行為的示例:
package main
import (
"fmt"
)
type myint int
func (m myint) String() string {
return fmt.Sprintf("%d", m)
}
func main() {
var val myint = 42
mystr := "Testing: " + string(val)
fmt.Println(mystr, val)
}
哪個輸出:
測試:* 42
但我期待:
測試:42 42
我可以定義如何使用
string()
將轉換為字符串應用於我的自定義類型myint
嗎? 以及如何做到這一點?
不,您不能“覆蓋”轉換行為。 它記錄在Spec: Conversions中,這就是它的結尾。 String()
方法適用於fmt
package,因為fmt
package 是為了顯式檢查String() string
方法的存在而編寫的。 轉換不會那樣做。
如果您需要自定義轉換行為,請不要使用轉換,而是在方法(或函數)中實現您的邏輯,並調用這些方法(或函數)。
因此,在您的示例中,您將編寫:
mystr := "Testing: " + val.String()
你會得到你所期望的 output (在Go Playground上試試):
Testing: 42 42
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.