golang 开发入门,用户增删改查接口实现

定义实体

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

猜你喜欢

转载自www.cnblogs.com/ljgeng/p/9657303.html
今日推荐