簡體   English   中英

如何為自定義類型定義類型轉換為字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM