英文:
Is it possible to add a variable "embedded variables" to a struct?
问题
你好!以下是翻译好的内容:
type UserModel struct {
...
}
func (u *UserModel) C() string {
return "system_users"
}
上述代码将一个嵌入的结构体赋值给类型UserModel
,Go语言是否允许使用var
或const
来完成相同的操作呢?
类似于:
var (u *UserModel) C = "system_users"
你明白我的意思吧。
英文:
type UserModel struct {
...
}
func (u *UserModel) C() string {
return "system_users"
}
The above will assign an embedded struct to the type UserModel
, does Go allow the same to be done with var
s or const
s?
Something like
var (u *UserModel) C = "system_users"
You get the idea.
答案1
得分: 2
方法
方法是绑定到类型的接收器的函数。接收器可以接受一个值或一个绑定方法的类型的指针。
Go通过示例提供了这个很好的例子:
type rect struct {
width, height int
}
// 这个 `area` 方法的_接收器类型_是 `*rect`。
func (r *rect) area() int {
return r.width * r.height
}
// 方法可以为指针或值接收器类型定义。这是一个值接收器的例子。
func (r rect) perim() int {
return 2*r.width + 2*r.height
}
是的,你可以为几乎所有现有的类型定义方法,除了interface
。而且它必须是局部类型(在包中定义,而不是内置类型)。
type Int int
func (i Int) Add(j Int) Int {
return i + j
}
嵌入
稍微推广一下"Effective Go":
嵌入类型的方法是免费的。这意味着如果类型B嵌入到类型A中,那么类型A不仅拥有自己的方法,还拥有类型B的方法。
扩展前面的例子:
type parallelogram struct {
rect // 嵌入。parallelogram 拥有 area 和 perim 方法
depth int
}
func (p parallelogram) volume() int { // 扩展 rect
// 体积逻辑
}
英文:
Methods
Methods is a functions with receivers bound to a types. Receiver could take a value or a pointer to a type which method bound to.
Go by example provides this nice example:
type rect struct {
width, height int
}
// This `area` method has a _receiver type_ of `*rect`.
func (r *rect) area() int {
return r.width * r.height
}
// Methods can be defined for either pointer or value
// receiver types. Here's an example of a value receiver.
func (r rect) perim() int {
return 2*r.width + 2*r.height
}
And yes you can define methods on almost all existing types except interface
. Also it must be local type (defined in a package not built-in)
type Int int
func (i Int) Add(j Int) Int {
return i + j
}
Embedding
Generalizing "Effective Go" a bit:
The methods of embedded types come along for free. Which means that if type B embedded to type A than type A not only has its own methods it also has methods of type B.
Extending previous example:
type parallelogram struct {
rect // Embedding. parallelogram has area and perim methods
depth int
}
func (p parallelogram) volume () int { // Extending rect
// Volume logic
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论