go学习——初写项目

15 篇文章 0 订阅

一、项目的结构

1. 三层架构:dao-service-controller

可以想象为一个金字塔
文件是最底层(这一层是不需要你写的),
向上是dao层,在上是service,最后是controller

dao: 数据持久层,直接作用于文件的那一层,在这一层写的函数可以直接的改动文件。 这一层调用file函数,比如Read() Creat() 等函数

service: 逻辑层,比如添加用户想要先看一下用户名是否存在, 如果不存在就添加,如果存在返回用户名已存在,就写到这一层, 这一层调用dao层的函数

controller: 控制层,最外面的一层,启动程序后,调用的是这一层函数,这一层里会进一步的向下(service-dao)调用

2. model包:放结构体

3. util包:放工具,例如读取文件函数ReadFile…

二、项目示例(用户)

1.util包(file)

创建一个文件

//创建文件
func CreatFile(name string) *os.File {
	file, err := os.Create(name)
	if err != nil {
		log.Fatalln(err)
	}
	return file
}

读取文件信息

//读取文件信息
func ReadFile(name string) []string {
	//打开文件
	file,err1 := os.OpenFile(name, os.O_CREATE|os.O_RDONLY, 0666)
	//关闭文件
	defer func(file *os.File) {
		err := file.Close()
		if err != nil{
			log.Fatal(err)
		}
	}(file)
    if err1 != nil {
		log.Fatal(err1)
	}
	//建立一个缓冲区
	reader := bufio.NewReader(file)
    result := make([]string,0)
	for{
		buf,err := reader.ReadString('\n')
		if err == io.EOF{
				break
		}
		buf = strings.Trim(buf,"\n")
		result = append(result,buf)
	}
	return result
}

往文件中写内容

//往文件中写内容
func WriteFile(name string,str1 []string) bool {
	file,err := os.OpenFile(name,os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
	if err != nil {
		log.Fatalln(err)
	}
	defer func(file *os.File) {
		err := file.Close()
		if err != nil {
			log.Fatalln(err)
		}
	}(file)
	writer := bufio.NewWriter(file)
	for _,str := range str1{
		_,err := writer.WriteString(str+"\n")
		if err != nil {
			log.Fatalln(err)
		}
	}
	err1 := writer.Flush()
	if err1 != nil {
		log.Fatalln(err1)
	}
	return true
}

往文件中添加内容

//追加一条信息
func AppendWriteFile(name string,str string) bool {
	file,err := os.OpenFile(name,os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
	if err != nil {
		log.Fatalln()
	}
	defer func(file *os.File) {
		err := file.Close()
		if err != nil {
			log.Fatalln(err)
		}
	}(file)
	writer := bufio.NewWriter(file)
	_, err1 := writer.WriteString(str+"\n")
	if err1 != nil {
		log.Fatalln(err)
	}
	err = writer.Flush()
	if err != nil {
		log.Fatalln(err)
	}
	return true
}

2.查找(根据编号查找用户)

dao层

func SelectUserByUserNo(UserNo string) model.User {
    var user model.User
    contains := util.ReadFile("./user.txt")
    for _,c := range contains {
        str := strings.Split(c," ")
        if str[0] == UserNo{
            user.UserNo = str[0]
            user.UserName = str[1]
            user.Password = str[2]
            var err error
            user.Level, err = strconv.Atoi(strings.Trim(str[3],"\r"))
            if err != nil {
                log.Fatalln(err)
            }
            return  user
        }
    }
    return user
}

service 层

func SelectUserByUserNo(UserNo string) model.User {
	return dao.SelectUserByUserNo(UserNo)
}

controller层

func SelectUserByUserNo()  {
	var UserNo string
	fmt.Println("请输入所查询的账号:")
	_,err := fmt.Scan(&UserNo)
	if err != nil{
		log.Fatalln(err)
	}
	User := service.SelectUserByUserNo(UserNo)
	fmt.Println("查询结果:")
	if User.IsStructureEmpty() {
		fmt.Println("未查询到结果!")
	}else {
		fmt.Printf("账号:%s,姓名:%s,密码:%s,权限:%d",User.UserNo,User.UserName,User.Password,User.Level)
	}
}

3.添加

dao层

func InsertUser() {
	fmt.Println("请输入所添加用户的信息:")
	Lable:
	var user model.User
	fmt.Println("请输入账号:")
	_,err := fmt.Scan(&user.UserNo)
	if err != nil {
		log.Fatalln(err)
	}
	users := service.SelectAllUser()
	for _,users1 := range users{
		if users1.UserNo == user.UserNo{
			fmt.Println("该账号已存在,请重新输入!")
			goto Lable
		}
	}
	fmt.Println("请输入姓名:")
	_,err = fmt.Scan(&user.UserName)
	if err != nil {
		log.Fatalln(err)
	}
	fmt.Println("请输入密码:")
	_,err = fmt.Scan(&user.Password)
	if err != nil {
		log.Fatalln(err)
	}
	fmt.Println("请输入权限:")
	_,err = fmt.Scan(&user.Level)
	if err != nil {
		log.Fatalln(err)
	}
	if service.InsertUser(user) {
		fmt.Println("添加用户成功!")
	}else{
		fmt.Println("添加失败,该账号已存在!")
	}
}

service层

func InsertUser(user model.User) bool {
	if user.IsStructureEmpty(){
		fmt.Println("未获取到信息!")
	}
	return dao.InsertUser(user)
}

controller层

func InsertUser() {
	fmt.Println("请输入所添加用户的信息:")
	Lable:
	var user model.User
	fmt.Println("请输入账号:")
	_,err := fmt.Scan(&user.UserNo)
	if err != nil {
		log.Fatalln(err)
	}
	users := service.SelectAllUser()
	for _,users1 := range users{
		if users1.UserNo == user.UserNo{
			fmt.Println("该账号已存在,请重新输入!")
			goto Lable
		}
	}
	fmt.Println("请输入姓名:")
	_,err = fmt.Scan(&user.UserName)
	if err != nil {
		log.Fatalln(err)
	}
	fmt.Println("请输入密码:")
	_,err = fmt.Scan(&user.Password)
	if err != nil {
		log.Fatalln(err)
	}
	fmt.Println("请输入权限:")
	_,err = fmt.Scan(&user.Level)
	if err != nil {
		log.Fatalln(err)
	}
	if service.InsertUser(user) {
		fmt.Println("添加用户成功!")
	}else{
		fmt.Println("添加失败,该账号已存在!")
	}
}

4.删除(根据编号删除)

dao层

func DeleteUserByUserNo(UserNo string) bool {
    strs := make([]string,0)
    users := SelectAllUser()
    for _,user := range users {
        if user.UserNo == UserNo{
            continue
        }
        s := user.UserNo+" "+user.UserName+" "+user.Password+" "+strconv.Itoa(user.Level)
        strs = append(strs,s)
    }
    return util.WriteFile("./user.txt",strs)
}

service层

func DeleteUserByUserNo(UserNo string) bool {
	return dao.DeleteUserByUserNo(UserNo)
}

controller层

func DeleteUserByUserNo()  {
	fmt.Println("请输入所删除用户的账号:")
	var userNo string
	_,err := fmt.Scan(&userNo)
	if err != nil {
		log.Fatalln(err)
	}
	if service.DeleteUserByUserNo(userNo){
		fmt.Println("删除用户成功!")
	}else{
		fmt.Println("删除失败,该用户不存在!")
	}
}

5.修改

dao层

func UpdateUserByUserNo(user model.User) bool {
    strs := make([]string,0)
    users := SelectAllUser()
    for _,user1 := range users {
        if user1.UserNo == user.UserNo{
            user1 = user
        }
        s := user1.UserNo+" "+user1.UserName+" "+user1.Password+" "+strconv.Itoa(user1.Level)
        strs = append(strs,s)
    }
    return util.WriteFile("./user.txt",strs)
}

service层

func UpdateUserByUserNo(user model.User) bool {
	if user.IsStructureEmpty(){
		fmt.Println("未获取到信息!")
	}
	return dao.UpdateUserByUserNo(user)
}

controller层

func UpdateUserByUserNo(myuser model.User)  {
	var result bool
	if myuser.Level == 0 {
		var userNo string
	Lable:
		fmt.Println("请输入所修改用户的账号:")
		_,err := fmt.Scan(&userNo)
		if err != nil {
			log.Fatalln(err)
		}
		user := service.SelectUserByUserNo(userNo)
		if user.IsStructureEmpty(){
			fmt.Println("未查询到该账号,请重新输入!")
			goto Lable
		}
	Lable1:
        fmt.Println("请选择您的修改内容:")
		fmt.Println("1 姓名:")
		fmt.Println("2 密码:")
		fmt.Println("3 权限:")
		fmt.Println("4 返回:")
		var s int
		_,err = fmt.Scan(&s)
		switch s {
		case 1 :
			fmt.Println("请重新输入姓名:")
			_,err = fmt.Scan(&user .UserName)
			if err != nil {
				log.Fatalln(err)
			}
            result = service.UpdateUserByUserNo(user)
			break
		case 2 :
			fmt.Println("请重新输入密码:")
			_,err = fmt.Scan(&user.Password)
			if err != nil {
				log.Fatalln(err)
			}
			result = service.UpdateUserByUserNo(user)
			break
		case 3 :
			fmt.Println("请重新输入权限:")
			_,err = fmt.Scan(&user.Level)
			if err != nil {
				log.Fatalln(err)
			}
			result = service.UpdateUserByUserNo(user)
			break
		case 4 :
			return
		default:
			fmt.Println("您的输入不正确,请重新输入!")
			goto Lable1
		}
		if result == true {
			fmt.Println("修改用户成功!")
		}else {
			fmt.Println("非常抱歉,修改失败!")
		}
	}else {
	Lable2:
		fmt.Println("请选择您的修改内容:")
		fmt.Println("1 密码:")
		fmt.Println("2 返回:")
		var s int
		_, err := fmt.Scan(&s)
		if err != nil {
			log.Fatalln(err)
		}
		switch s {
		case 1 :
			fmt.Println("请重新输入密码:")
			_,err := fmt.Scan(&myuser.Password)
			if err != nil {
				log.Fatalln(err)
			}
			result = service.UpdateUserByUserNo(myuser)
			break
		case 2 :
			return
		default:
			fmt.Println("您的输入不正确,请重新输入!")
			goto Lable2
		}
		if result == true {
			fmt.Println("修改用户成功!")
		}else {
			fmt.Println("非常抱歉,修改失败!")
		}
		}
	}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值