Golang结构体实战练习

Golang结构体实战练习 以下是我的代码:https://play.golang.org/p/_NsL947SE9a

这是老师的解决方案:https://play.golang.org/p/2mgWOEh0CYa

在我看来,错误提示要求我在末尾比他的代码多一个 }。有人知道原因吗?

21 回复

谢谢

更多关于Golang结构体实战练习的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


谢谢 🙂

字段是结构体的组成部分,而方法是应用于对象的函数。

它访问 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 stringage 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)
}
回到顶部