Golang中的结构体与映射表使用指南

Golang中的结构体与映射表使用指南 看看这个小程序,因为它确实是个程序,对吧?

不管怎样… https://play.golang.org/p/bp13cLhKIBy

是否有可能创建一个映射,显示科目名称、教师姓名和上课时间?我不知道该用什么类型来表示时间。

10 回复

原来我漏掉了几个逗号。谢谢!

更多关于Golang中的结构体与映射表使用指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


那么我应该使用 map[string]string 吗?

以下是对地图的尝试,不包括时间 https://play.golang.org/p/z-J9mW_qve_P

这是我的尝试。

https://play.golang.org/p/JzDDgIEoa0G

我遇到了:意外的换行符,期望逗号或 }

但我确实在那里加了"}"。

有趣。我会尝试一下。

我在那些提示缺少逗号的行尾加上了 ,,然后似乎就能正常工作了:

https://play.golang.org/p/j7wWnnihE_s

输出:

{History Mr. Towers 4 [8:00]}
{Latin Mrs. Martin 2 [9:30]}
History Mr. Towers 4
Latin Mrs. Martin 2

map[History:Mr. Towers Latin:Mrs. Martin]

如果您愿意将课程时间存储为字符串,那么可以这样做;如果您想将其作为其他类型,则不行。

感觉您可能需要使用结构体。

不存在 map[string]string string(如果我没理解错的话)。

如果你想将某些字符串表示形式放入 map[string]string 中,可以这样操作:

m := make(map[string]string)
m["date"] = "2018-01-01"

但实际上很少需要这样做。

而且这并不适合你的数据,看起来你原本是想将课程名称映射到对应的教师。如果把日期放进去,就会变成名为"date"的课程由"2018-01-01"来教授。

正如我之前所说,你可能需要重新考虑你的数据结构设计。

NobbZ:

不存在 map[string]string string(如果我没理解错的话)。

如果你想将某些字符串表示形式放入 map[string]string 中,可以这样做:

m := make(map[string]string)
m["date"] = "2018-01-01"

但你实际上很少需要这样做。

此外,这并不适合你的数据,看起来你的映射是将课程名称映射到其教师。如果你把日期放进去,它看起来就像一个名为 “date” 的课程,由 “2018-01-01” 教授。

正如我所说,你可能需要重新考虑你的数据结构。

我会研究一下这个。

在Go语言中,你可以使用结构体和映射表来存储科目名称、教师姓名和上课时间。对于时间表示,建议使用time.Time类型来处理日期和时间,它提供了丰富的功能来格式化和操作时间数据。以下是一个示例代码,展示如何创建一个映射,其中键为科目名称,值为包含教师姓名和上课时间的结构体。

首先,定义一个结构体来存储课程信息:

package main

import (
    "fmt"
    "time"
)

type ClassInfo struct {
    Teacher string
    Time    time.Time
}

然后,创建一个映射,键为科目名称(字符串),值为ClassInfo结构体:

func main() {
    // 创建一个映射来存储课程信息
    classSchedule := make(map[string]ClassInfo)
    
    // 示例:添加一个课程条目
    // 使用 time.Date 来创建时间对象,参数依次为:年、月、日、时、分、秒、纳秒、时区
    classTime := time.Date(2023, time.October, 15, 9, 0, 0, 0, time.UTC)
    classSchedule["Mathematics"] = ClassInfo{
        Teacher: "Dr. Smith",
        Time:    classTime,
    }
    
    // 添加另一个课程
    anotherTime := time.Date(2023, time.October, 15, 11, 0, 0, 0, time.UTC)
    classSchedule["Physics"] = ClassInfo{
        Teacher: "Prof. Johnson",
        Time:    anotherTime,
    }
    
    // 遍历映射并打印课程信息
    for subject, info := range classSchedule {
        fmt.Printf("Subject: %s, Teacher: %s, Time: %s\n", subject, info.Teacher, info.Time.Format("2006-01-02 15:04:05"))
    }
}

在这个示例中:

  • 我们定义了一个ClassInfo结构体,包含Teacher(字符串)和Timetime.Time类型)字段。
  • 使用make函数初始化一个映射classSchedule,键类型为string(科目名称),值类型为ClassInfo
  • 通过time.Date函数创建具体的时间对象,指定年、月、日、时、分、秒、纳秒和时区(这里使用UTC)。
  • 将课程信息添加到映射中,然后遍历映射并打印每个科目的详细信息。时间使用Format方法格式化为可读字符串("2006-01-02 15:04:05"是Go语言中时间格式化的标准布局)。

运行此代码将输出:

Subject: Mathematics, Teacher: Dr. Smith, Time: 2023-10-15 09:00:00
Subject: Physics, Teacher: Prof. Johnson, Time: 2023-10-15 11:00:00

这种方法允许你灵活地存储和检索课程数据。如果你需要处理重复时间或更复杂的时间逻辑,可以考虑使用time包的其他功能,如time.Weekday来表示每周的课程安排。

回到顶部