gpt4 book ai didi

go - 如何在Go中将结构作为参数传递给导入的函数?

转载 作者:行者123 更新时间:2023-12-01 22:38:33 26 4
gpt4 key购买 nike

我已经在main.go文件中定义并创建了一个结构实例。我想使用我的struct实例作为参数从functions / functions.go文件中调用函数

package main

import (
"./functions"
)

type person struct {
name string
age int
}

func main() {
person1 := person{"James", 24}
functions.Hello(person1)
}
main.go
package functions

import "fmt"

type person struct {
name string
age int
}

func Hello(p person) {
fmt.Println(p.name, "is", p.age, "years old")
}
functions / functions.go
当我使用 go run main.go运行此代码时,出现错误: main.go:16:17: cannot use person1 (type person) as type functions.person in argument to functions.Hello 我的问题
在Go中将结构实例作为参数传递给导入函数的正确方法是什么?

最佳答案

您要定义两种不同的结构类型(具有相同的字段,但有所不同)-其中一种是person,另一种是functions.person
在这种情况下,正确的方法是像这样在functions/functions.go中定义您的结构:

package functions

import "fmt"

// Use uppercase names to export struct and fields (export == public)
type Person struct {
Name string
Age int
}

func Hello(p Person) {
fmt.Println(p.Name, "is", p.Age, "years old")
}
现在在 main.go中,您可以导入 functions包并访问其导出/ public 结构:
package main

import (
"./functions"
)

// No need to redeclare the struct, it's already defined in the imported package

func main() {
// create an object of struct Person from the functions package. Since its fields are public, we can set them here
person1 := functions.Person{"James", 24}

// call the Hello method from the functions package with an object of type functions.Person
functions.Hello(person1)
}
关键要点是,用相同名称定义的结构即使看起来很相似也不会自动相同-毕竟它们的定义不同。
如果两个结构具有相同的字段,也可以进行类型转换,但这就是 different story

关于go - 如何在Go中将结构作为参数传递给导入的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63874423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com