问题遇到的现象和发生背景
我面向对象编写了一个分成两个package的简易学生系统,在main包里声明了结构体,在其他包里面定义的结构体,Goland没有报错,但是实际编译就会报错。
问题相关代码,请勿粘贴截图
main.go↓
package main
import (
"fmt"
"os"
)
//Student 结构体
var smr StudentMr
func showMenu() {
fmt.Println("欢迎来到学生管理系统!")
fmt.Println(请输入以下功能选项 1.查看全部学生 2.新增学生 3.删除学生 4.修改学生 5.退出
)
}
func main() {
var choice int
smr = StudentMr{
StuList: make(map[string]Student, 60),
}
//打印菜单
for {
showMenu()
fmt.Println("请输入你的选项:")
fmt.Scanln(&choice)
fmt.Printf("你选择的是%d", choice)
fmt.Println()
switch choice {
case 1:
smr.showAllStudent()
case 2:
smr.addStudent()
case 3:
smr.deleteStudent()
case 4:
smr.updateStudent()
case 5:
os.Exit(1)
default:
fmt.Println("你啥也没选择")
}
}
}
Student_Mng.go↓
package main
import "fmt"
type Student struct {
id string
name string
}
type StudentMr struct {
StuList map[string]Student
}
func (s StudentMr) showAllStudent() {
for _, v := range s.StuList {
fmt.Println(v.id, v.name)
}
}
func (s StudentMr) addStudent() {
var name string
var id string
fmt.Println("请输入学生ID")
fmt.Scanln(&id)
fmt.Println("请输入学生姓名")
fmt.Scanln(&name)
stu := Student{
id: id,
name: name,
}
s.StuList[stu.id] = stu
fmt.Printf("你添加的的学生和ID:%#v", stu)
fmt.Println()
}
func (s StudentMr) deleteStudent() {
var id string
fmt.Println("请输入要删除的学生ID")
fmt.Scanln(&id)
_, ok := s.StuList[id]
if !ok {
fmt.Println("不存在ID为:", id, "的学生")
} else {
delete(s.StuList, id)
}
}
func (s StudentMr) updateStudent() {
var id string
fmt.Println("请输入要更新的学生ID")
fmt.Scanln(&id)
_, ok := s.StuList[id]
if !ok {
fmt.Println("不存在ID为:", id, "的学生")
} else {
var name string
fmt.Println("请输入更新的学生姓名")
fmt.Scanln(&name)
upStu := Student{
id: id,
name: name,
}
s.StuList[id] = upStu
}
}
运行结果及报错内容
command-line-arguments
.\main.go:9:9: undefined: StudentMr
.\main.go:24:8: undefined: StudentMr
Compilation finished with exit code 2
我的解答思路和尝试过的方法
我尝试过把方法名改成大写,但是依然报这个错
我想要达到的结果
正常运行