zoukankan      html  css  js  c++  java
  • golang 开发入门01-用户增删改查接口实现

    定义实体

    通过struct 定义实体

    // 用户实体
    type User struct {
    	// 主键
    	Id int
    	// 用户登录名
    	Username string
    	// 登录密码
    	Password string
    }
    

    模拟存储

    定义一个存储接口,包含增删改查接口

    // 用户存储接口
    type UserStore interface {
    	// 根据ID获取用户
    	Get(id int) (*domain.User, error)
    
    	// 获取所有用户
    	Gets() ([]*domain.User, error)
    
    	// 持久化用户
    	Save(u *domain.User) error
    
    	// 更新用户
    	Update(u *domain.User) error
    
    	// 删除用户
    	Delete(id int) error
    }
    

    实现存储接口

    // 实现UserStore接口
    type UserStoreImpl struct {
    	// 用map 模拟存储数据库
    	db map[int] *domain.User
    }
    
    
    func (userStore *UserStoreImpl) Get(id int) (*domain.User, error) {
    	user := userStore.db[id]
    	return user, nil
    }
    
    func (userStore *UserStoreImpl) Gets() ([]*domain.User,error ) {
    	users := make([]*domain.User,len(userStore.db))
    	for _, v := range userStore.db {
    		users = append(users,v)
    	}
    	return users,nil
    }
    
    func (userStore *UserStoreImpl) Save(u *domain.User) error {
    	userStore.db[u.GetId()] = u;
    	return nil
    }
    
    func (userStore *UserStoreImpl)  Update(u *domain.User) error {
    	userStore.db[u.GetId()] = u;
    	return nil
    }
    
    func (userStore *UserStoreImpl) Delete(id int) error {
    	delete(userStore.db, id)
    	return nil
    }
    

    添加一个构造函数,在函数中初始化一条数据,便于测试

    // 构造函数
    func NewUserStore() *UserStoreImpl {
    	userStore := &UserStoreImpl{}
    	userStore.db = map[int]*domain.User{}
    	
    	//添加测试数据
    	user := new(domain.User)
    	user.SetId(1)
    	user.SetUsername("Lily")
    	userStore.db[1] = user
    	return userStore
    }
    

    实现接口

    这里业务简单,省去了业务层编码,直接在接口存调用存储

    func main() {
    	http.HandleFunc("/users", usersHandler)
        http.ListenAndServe(":8000", nil)
    }
    
    func usersHandler(w http.ResponseWriter, req *http.Request) {
    	if req.Method == "GET" {
    		idStr := req.URL.Query().Get("id")
    		if idStr=="" {
    			w.Write([]byte("未传ID参数")); 
    			return
    		}
    		userStore := store.NewUserStore()
    		id,_ := strconv.Atoi(idStr)
    		user,_ := userStore.Get(id)
    		fmt.Print(user)
    		b,_ := json.Marshal(user)
    		w.Write(b)
    	} else if req.Method == "POST" {
                //TODO 保存
    	} else if req.Method == "PUT" {
                // TODO 修改
            } else if req.Method == "DELETE" {
                // TODO 删除
            } 
            
    }
    

    至此,运行程序,打开浏览器 访问 http://localhost:8000/users?id=1 即可查看用户信息

  • 相关阅读:
    Ajax请求过程中显示“进度”的简单实现
    Asp.net 图片文件防盗链介绍
    ASP.NET MVC验证
    MVC文件上传
    MVC文件上传-使用jQuery.FileUpload和Backload组件实现文件上传
    使用jQuery.FileUpload插件和服Backload组件自定义上传文件夹
    使用jQuery.FileUpload和Backload自定义控制器上传多个文件
    使用jQuery.FileUpload插件和Backload组件裁剪上传图片
    CSS3 多列
    CSS3 2D转换 动画
  • 原文地址:https://www.cnblogs.com/ljgeng/p/9657303.html
Copyright © 2011-2022 走看看