go工程测试实践课后解答|青训营笔记

74 阅读1分钟

线程和协程

线程是炒作系统内核调度最小单位,协程是一种用户态的轻量级线程

image.png

CSP并发模型

CSP模型提供了一种清晰、简洁的描述并发系统的方式,它被广泛应用于并发编程语言和工具中,如Go语言中的goroutine和通道、Occam语言等。同时,CSP模型也为并发系统的调试和验证提供了理论基础。他们还有两者的差别

1.有缓冲通道:有缓冲通道允许一定数量的消息在发送和接收之间进行暂存。

image.png

2.无缓冲通道:无缓冲通道在发送和接收操作之间提供了同步。

image.png

依赖管理

最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面。go mod命令:
[go mod 使用 - 掘金 (juejin.cn)](https://juejin.cn/post/6844903798658301960)

课后实践一部分完成,GitHub上有些人做出来了

1.我们把相应的读取topic和post的API实现都改成如上的Get()和Set()方法

       func (*Topic) QueryTopicById(userid int64) *Topic {
            topic, _ := topicIndexRWMap.Get(id)
            return topic
    }

func (*Post) QueryPostsByParentId(parentId int64) []*Post {
        Listpost, _ := postIndexRWMap.Get(parentId)
        return Listpost
}

2.Cotroller层中的NewPage()实现如下。

func NewPage(newPage *service.PageInfo) *PageData {
        err := service.AddNewPage(newPage)
        if err != nil {
                return &PageData{
                        Code: -1,
                        Msg:  err.Error(),
                }
        }
        return &PageData{
                Code: 0,
                Msg:  "success",
                Data: newPageInfo,
        }
}

3.serviceAddNewPage()

func NewPage(newPageInfo *PageInfo) error {
        userid, err := repository.NewTopicDaoInstance().AddNewTopic(newPageInfo.Topic)
        if err != nil {
                return err
        }
        err = repository.NewPostDaoInstance().NewPost(newPageInfo.PostList, userid)
        if err != nil {
                return err
        }
        return nil
}

基本的代码就已经实现了,我也有些想不出来感谢各位大佬观看有什么好的思路可以建议下