![](/img/trans.png)
[英]How do I access a method expression (struct function) from within another method expression in Go / Golang?
[英]Access values of Go struct in external function
我有以下函数声明,该函数可以正常工作并正确打印。
import (
"fmt"
"github.com/google/go-github/github"
)
func LatestTag(user, project string) {
client := github.NewClient(nil)
releases, _, err := client.Repositories.ListTags(user, project, nil)
if err != nil {
fmt.Printf("error: %v\n", err)
} else {
release := releases[0]
fmt.Printf("Version: %+v\n", *release.Name)
}
}
编辑
我已经修改了该函数以返回字符串(我认为这是不对的),但希望它可以帮助我了解我要做什么。
import (
"fmt"
"github.com/google/go-github/github"
)
func LatestTag(user, project string) string {
client := github.NewClient(nil)
releases, _, err := client.Repositories.ListTags(user, project, nil)
var release string
if err != nil {
fmt.Printf("error: %v\n", err)
} else {
release := releases[0]
}
return *release.Name
}
我想返回*release.Name
的值,而不是仅仅打印出来,以便我可以从另一个函数访问该值,但是我不了解在这种情况下返回的工作方式(Go的新手)。
我以为我可以将结构作为字符串返回,但是在运行它时会出错。
release.Name undefined (type string has no field or method Name)
这使我认为我没有正确地解决这个问题。 有人可以指出我正确的方向吗?
一个问题在这里:
var release string
...
if err != nil {
...
} else {
release := releases[0] // <-- here
}
在指示的行上,定义一个名为release
的新变量,等于releases[0]
,该变量仅作用于else
子句(使用:=
)。 然后立即超出范围。 我很惊讶您没有收到未使用的变量警告。 看起来您还需要将release
类型更改为github.RepositoryTag
。 尝试:
var release github.RepositoryTag
...
if err != nil {
...
} else {
release = releases[0] // note equals sign
}
但是,更惯用的方法是(未测试):
func LatestTag(user, project string) (string, error) {
client := github.NewClient(nil)
if releases, _, err := client.Repositories.ListTags(user, project, nil); err != nil {
return "", err
} else {
release := releases[0]
return *release.Name, nil
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.