在 Golang 中为类型定义字符串输出
Define string output for type in Golang
我想知道是否有一种方法可以通过 fmt
来指定字符串针对特定类型的输出方式。例如,我有一个 token
结构,其中包含关于令牌的一堆信息,例如令牌类型(这是一个 int,但为了清楚起见,如果我可以输出令牌的名称会更有意义输入为字符串)。
那么当我打印特定类型的变量时,有没有直接的方法specify/implement这种类型的字符串输出?
如果这真的没有意义,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)"
您需要实现接口 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 中,您无需指定类型实现哪些接口,您只需实现所需的方法。
我想知道是否有一种方法可以通过 fmt
来指定字符串针对特定类型的输出方式。例如,我有一个 token
结构,其中包含关于令牌的一堆信息,例如令牌类型(这是一个 int,但为了清楚起见,如果我可以输出令牌的名称会更有意义输入为字符串)。
那么当我打印特定类型的变量时,有没有直接的方法specify/implement这种类型的字符串输出?
如果这真的没有意义,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)"
您需要实现接口 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 中,您无需指定类型实现哪些接口,您只需实现所需的方法。