尝试通过在线课程自学一些Go。而且我试图稍微偏离我的学习过程。
本课程让我们使用几个变量编写一个简单的函数,函数将获取两个变量并打印出一行。所以我有:
func main() {
var greeting := "hello"
var name := "cleveland"
message := printMessage(greeting,name)
fmt.Println(message)
}
func printMessage(greeting string, name string) (message string) {
return greeting + " " + name + "!"
}
后来本课程介绍了一种使用
创建字符串伪数组的方法 func sayHello (cities ...string) (message string) {
for _, city := range cities {
message := printMessage("hello", city)
fmt.Println(message)
}
}
我想创建一个具有不同问候语的结构,并将它们传递给sayHello函数。所以struct和变量看起来像这样:
type cityInfo struct {
greeting string
name string
wins float32
gamesPlayed float32
}
city1 := cityInfo{"hello", "cleveland"}
city2 := cityInfo{"good morning", "atlanta"}
...and so on
如何格式化函数以将这些结构传递给函数,以便我可以使用city.greeting和city.name迭代结构数并获取问候语和名称?这个问题有意义吗?
答案 0 :(得分:1)
函数参数类型可以是任何有效类型:
func sayHello (cities ...cityInfo) {
for _, city := range cities {
message := printMessage(city.greeting, city.name)
fmt.Println(message)
}
}
答案 1 :(得分:0)
一种解决方案是创建界面和问候方法。
例如:
type Greetable interface {
Greeting() string
Name() string
}
然后,您将在结构中实现Greeting和Name方法(这将立即实现Greetable接口,due to the way that Go handles interfaces):
type cityInfo struct {
name string
greeting string
}
func (city *cityInfo) Greeting() string {
return city.greeting
}
func (city *cityInfo) Name() string {
return city.name
}
然后你的函数会接受任何实现Greetable的东西:
func sayHello(greetables ...Greetable) (message string)
然后使用Name()
和Greeting()
方法。