• 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 即可查看用户信息

  • 相关阅读:
    蛙蛙推荐:改进了一个DBAccess类,顺便说说啥是线程安全
    蛙蛙推荐:SQLServer优化资料整理
    快速配置Eclipse3.1.1+Tomcat5.0+Lomboz dodo
    建立asp.net应用程序提示:无法与服务器建立连接 dodo
    tomcat连接sqlserver配置 dodo
    如何让DNN页面中的html控件中的文本项显示为中文? dodo
    DropDownList 不能有多个项被选定 dodo
    转换DATAREADER为 dataset dodo
    使用ComponentArt.WebUI.for.Asp.net.3.0的TreeView控件 dodo
    ASP.NET的WEB项目不能添加WEB用户控件的解决 dodo
  • 原文地址:https://www.cnblogs.com/ljgeng/p/9657303.html
Copyright © 2020-2023  润新知