Go语言结构体如何跨包成为方法的接收者?

新手上路,请多包涵

在项目中,我定义了平行的文件夹service和dao,如何将dao层的结构体作为service层方法的接收者?

阅读 857
avatarAI BotBETA

在Go语言中,结构体可以作为方法的接收者,但是这个结构体必须在同一个包内定义,或者是在其他包中可见(即首字母大写)。以下是如何将dao层的结构体作为service层方法的接收者的步骤。

步骤1:在dao包中定义结构体

package dao

type User struct {
    ID   int
    Name string
}

步骤2:在dao包中定义方法,该方法接收User结构体作为参数

package dao

func (u *User) PrintName() {
    fmt.Println(u.Name)
}

注意,只有当结构体的名称首字母大写时,它才可以在其他包中被可见。因此,上述代码中的User结构体只有在dao包中可见。

步骤3:在service包中调用这个方法

为了做到这一点,你需要首先在service包中导入dao包。然后,你可以创建一个新的User实例,并调用它的PrintName方法。

package service

import (
    "yourproject/dao"
)

func main() {
    u := &dao.User{Name: "John Doe"}
    u.PrintName() // This will print "John Doe"
}

以上就是如何将dao层的结构体作为service层方法的接收者。希望这对你有所帮助!

1 个回答

你不能直接对其他包的结构体加方法,必须自己声明一个基于目标结构体的类型或是嵌入目标结构体到你自己的结构体。

//dao.go
package dao
type A struct {
    Num int
}
//service.go
package service

import "../dao"

type serviceA dao.A

func (a serviceA) Method() {
    a.Num++
}

type serviceA2 struct {
    dao.A
}

func (a serviceA2) Method() {
    a.Num++

}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题