Golang中如何从导入的类型创建结构体实例
Golang中如何从导入的类型创建结构体实例 我在另一个目录的包中创建了一个结构体,结构体名称为Person。现在我想在main包中创建一个person实例,并像这样使用:
func main() {
p := Person {
"Joe",
"Doe",
time.Date(1971, time.September, 1, 0, 0, 0, 0, time.UTC),
"xxx@xxxx.com,
"Helena",
}
}
但这无法正常工作,而且我无法导入该包,因为在保存时导入语句会被自动移除。
3 回复
要使用来自其他包的类型,你需要在类型前加上包名,如下所示:
package main
import "yourpkg"
func main() {
p := yourpkg.Person {
"Joe",
"Doe",
time.Date(1971, time.September, 1, 0, 0, 0, 0, time.UTC),
"xxx@xxxx.com",
"Helena",
}
}
在Go语言中,要从另一个包导入类型并创建结构体实例,需要确保以下几点:
- 结构体类型和字段必须导出(首字母大写)
- 正确导入包路径
- 使用包名作为前缀引用类型
以下是正确的实现方式:
目录结构:
project/
├── main.go
└── models/
└── person.go
models/person.go:
package models
import "time"
// Person 结构体字段必须首字母大写才能被外部包访问
type Person struct {
FirstName string
LastName string
BirthDate time.Time
Email string
City string
}
main.go:
package main
import (
"time"
"your-project/models" // 替换为你的实际包路径
)
func main() {
p := models.Person{
FirstName: "Joe",
LastName: "Doe",
BirthDate: time.Date(1971, time.September, 1, 0, 0, 0, 0, time.UTC),
Email: "xxx@xxxx.com",
City: "Helena",
}
// 使用结构体实例
_ = p // 避免未使用变量错误
}
关键要点:
- 结构体类型名
Person首字母大写 - 所有字段名 (
FirstName,LastName等) 首字母大写 - 导入语句格式:
import "your-module-path/models" - 使用
models.Person引用类型
如果导入语句被自动移除,检查:
- 模块配置:确保有正确的
go.mod文件 - 包路径:导入路径与实际包路径匹配
- 编辑器配置:检查IDE/编辑器设置
go.mod 示例:
module your-project
go 1.21
使用这种方式可以正确导入并在main包中创建Person结构体实例。

