Golang结构体实战练习
Golang结构体实战练习 以下是我的代码:https://play.golang.org/p/_NsL947SE9a
这是老师的解决方案:https://play.golang.org/p/2mgWOEh0CYa
在我看来,错误提示要求我在末尾比他的代码多一个 }。有人知道原因吗?
谢谢 🙂
字段是结构体的组成部分,而方法是应用于对象的函数。
它访问 p1 中的字段或方法。
努力不让自己显得愚蠢,我不明白你所说的字段和方法是什么意思
酷
字段是结构体的组成部分,而方法是应用于对象的函数。
我要保存这个。
如果你不知道也没关系……我想我们在这里都是为了分享知识,互相学习。
此致,
这是之前的尝试。
https://play.golang.org/p/7vn5j-wZmEz
它访问 p1 中的字段或方法。
这很有帮助,现在让我对后续回复有了方向。
继续这个练习,这段代码有什么问题:https://play.golang.org/p/vQVx2pdivUF
johandalabacka:
你在 fmt.Println 语句周围多加了几个花括号。
我完全不明白自己为什么要那样做
derekkenney:
别觉得自己笨,这对你来说是新鲜事物
感谢你的鼓励 🙂
别觉得自己笨。这对你来说是新的。把结构体想象成一个事物。这个事物有特征、属性,同时也有行为,也就是函数。
derekkenney: 将结构体视为一个事物。该事物具有特征、属性,并且该事物还具有行为,这些行为就是函数。
我也会保存这个。
按下名为"格式化"的蓝色按钮,您将看到此链接所示内容,您在fmt.Println语句周围多加了几个花括号。
func main() {
fmt.Println("hello world")
}
接下来的实践练习延续了之前的代码。我目前的位置是:https://play.golang.org/p/ubUm3l1PcOB
在继续之前,因为我想独立完成这个练习,请为我解释"last":p1中点的作用。
你忘记在 p2 := person{ ... 后面加上右大括号。而且你需要在尝试打印 m 之前先声明并设置它的值。
p2 := person{
name: "Hank",
age: 45,
}
m := p2.age
fmt.Println(m)
在格式化后你会看到这样的代码:
m := map[string]person{
p1.last: p1,
p2.last: p2,
},
fmt.Println(m)
所以编译器基本上看到的是类似于这样的内容:m := 1, 2。
错误信息也明确指出了这一点:
prog.go:24:4: 赋值不匹配:1个变量但提供了2个值
剩下的两个错误信息与此相关,在这种情况下可以忽略。
请注意,当你遇到无法正常工作的代码时,请同时提供错误信息或意外输出,并尝试解释你原本期望的结果,或者你对错误信息中哪些部分不理解。
迟早你需要真正靠自己理解这些错误信息,否则你将永远无法做出比"hello world"更复杂的程序。
从你的代码和老师的解决方案对比来看,问题确实出现在结构体声明的语法上。你的代码中缺少了结构体字段之间的逗号分隔符。
在你的代码中:
type person struct {
first string
last string
age int
}
而你的实际代码可能是这样的:
type person struct {
first string
last string // 这里缺少逗号
age int
}
在Go语言中,结构体字段声明需要以逗号分隔。正确的语法应该是:
type person struct {
first string,
last string,
age int,
}
或者更常见的写法(省略末尾逗号):
type person struct {
first string
last string
age int
}
但根据错误提示,很可能是你在某个字段声明后漏掉了逗号,导致编译器认为结构体声明没有正确结束,因此提示需要额外的 }。
检查你的代码中是否在 last string 和 age int 字段声明之间缺少了逗号分隔符。修正后应该就能正常编译了。
示例修正:
package main
import "fmt"
type person struct {
first string
last string // 确保这里有逗号或正确换行
age int
}
func main() {
p1 := person{
first: "James",
last: "Bond",
age: 32,
}
p2 := person{
first: "Miss",
last: "Moneypenny",
age: 27,
}
fmt.Println(p1)
fmt.Println(p2)
fmt.Println(p1.first, p1.last, p1.age)
fmt.Println(p2.first, p2.last, p2.age)
}

