在Golang中为类型定义字符串输出

时间:2018-10-28 16:29:17

标签: go gofmt

我想知道是否有一种通过fmt来指定特定类型的字符串输出方式的方法。例如,我有一个token结构,其中包含关于令牌的一堆信息,例如令牌类型(这是一个int,但是出于清楚的原因,如果我可以输出令牌的名称,则更有意义输入为字符串)。

因此,当我打印特定类型的变量时,是否有一种简单的方法来指定/实现这种类型的字符串输出?

如果那真的没有道理,Rust可以做到这一点(根据他们的文档)

use std::fmt;

struct Point {
    x: i32,
    y: i32,
}

impl fmt::Display for Point {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "({}, {})", self.x, self.y)
    }
}

let origin = Point { x: 0, y: 0 };

println!("The origin is: {}", origin); // prints "The origin is: (0, 0)"

1 个答案:

答案 0 :(得分:2)

您需要实现Stringer接口,如下所示:

import "fmt"

type Point struct {
    x int
    y int
}

func (p Point) String() string {
    return fmt.Sprintf("(%d, %d)", p.x, p.y)
}

func main() {
    fmt.Println(Point{1, 2})
}

Go Playground

在Go中,您无需指定类型实现的接口,而仅实现所需的方法。