You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言中如何将main包内的结构体导入至其他包?

问题解答

核心结论

不能从test包导入main包的内容,原因有两点:

  1. Go语言中main包是特殊包,仅用于生成可执行程序,禁止其他任何包导入main包,这是语言层面的硬性限制。
  2. 当前代码已存在循环依赖:main包导入了test包,若test包再尝试导入main包,会触发Go的循环依赖检测,编译直接失败。

解决方案:拆分公共代码

将需要共享的结构体移到一个独立的公共包中,让main和test包都导入这个公共包,避免循环依赖和main包导入问题。

调整后的目录结构

root/
├── common/
│   └── types.go
├── test/
│   └── test.go
├── main.go
└── go.mod

编写公共包代码(common/types.go)

package common

// 将原来的MainStruct移到这里,供其他包共享
type MainStruct struct {
    Name string
}

修改main.go

package main

import (
    "my_project/common"
    "my_project/test"
)

func main() {
    // 从公共包实例化结构体
    ms := common.MainStruct{Name: "demo"}
    // 传递给test包的函数
    test.TestFunction(ms)
}

修改test.go

package test

import "my_project/common"

func TestFunction(ms common.MainStruct) {
    // 直接使用公共包中的MainStruct
    println("Received name:", ms.Name)
}

补充说明

Go的包体系中没有“父包/子包”的层级依赖关系,所有包都是平等的,导入仅依赖模块下的完整路径。任何需要在多个包间共享的代码,都应该放在独立的公共包中,这也是Go项目的标准实践。

内容的提问来源于stack exchange,提问作者Amirhossein Aliakbarpour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:16:21