随着 Golang 所讲求的简洁性以及强类型系统,类型嵌套成为了 Go 程序员们常用的一种编程技巧。然而,如果对类型嵌套的行为和特性理解不清楚或者没有意识到,往往会导致常见但难以追踪的错误。本文将详细解读类型嵌套可能导致的问题,并且提供丰富的示例。
类型嵌套带来的改变
-
更改方法行为
类型嵌套影响了方法的行为。把一个类型嵌套在另一个类型中,如果这个被嵌套的类型有方法,那么在外面的类型也表现出这些行为。
例如:
type Foo struct {}
func (f Foo) Hello() { fmt.Println("Hello from Foo") }
type Bar struct { Foo }
然后,我们创造一个 Bar
的实例并尝试调用 Hello
方法:
b := Bar{}
b.Hello() // 输出:Hello from Foo
这里 b
无需定义自己的 Hello
方法却能直接调用,但我们可能会误以为 Hello
方法是 Bar
对象自身的方法。
-
隐藏字段问题
type Foo struct { a int }
type Bar struct { Foo; a int; }
现在,如果我们尝试访问 Bar
的 a
字段:
b := Bar{Foo: Foo{a:1}, a:2}
fmt.Println(b.a)
</