在 go 中,调用方法时忘记添加括号(`()`)是一个常见但容易被忽视的错误。`fmt.println(v.fullname)` 并不会执行 `fullname` 方法,而是将该方法的**函数值(function value)**——即一个指向该方法的可调用对象——传递给 `fmt.println`。由于 `fmt` 对函数值默认以十六进制地址形式输出(如 `0x496d20`),因此你看到的是类似 `0x496d20` 的地址,而非预期的 `"aaabbb"`。
要获得正确的字符串输出,必须显式调用方法:使用 v.fullName()(带括号),才能触发方法执行并返回拼接后的字符串。
✅ 正确写法如下:
package main
import "fmt"
type Name struct {
first, last string
}
func (name Name) fullName() string {
return name.first + name.last
}
func main() {
v := Name{"aaa", "bbb"}
fmt.Println(v.fullName()) // 注意:这里必须加 ()!
}?
输出结果:
aaabbb
⚠️ 补充说明:
? 总结:在 Go 中,有括号是调用,无括号是引用。只要目标是获取方法的返回值,请务必确认末尾有 ()。这是编写清晰、可靠 Go 代码的基础习惯之一。