这章我们学习了什么是session,什么是cookie,以及他们两者之间的关系。但是目前Go官方标准包里面不支持session,所以我们设计了一个session管理器,实现了session从创建到销毁的整个过程。然后定义了Provider的接口,使得可以支持各种后端的session存储,然后我们在第三小节里面介绍了如何使用内存存储来实现session的管理。第四小节我们讲解了session劫持的过
这一章我们讲解了Go如何设计database/sql接口,然后介绍了各种第三方关系型数据库驱动的使用。接着介绍了beedb,一种基于关系型数据库的ORM库,如何对数据库进行简单的操作。最后介绍了NOSQL的一些知识,目前Go对于NOSQL支持还是不错,因为Go作为21世纪的C语言,那么对于21世纪的数据库也是支持的相当好。 通过这一章的学习,我们学会了如何操作各种数据库,那么就解决了我们数据存储的
这一章里面我们学习了Go如何处理表单信息,我们通过用户登陆、上传文件的例子展示了Go处理form表单信息及上传文件的手段。但是在处理表单过程中我们需要验证用户输入的信息,考虑到网站安全的重要性,数据过滤就显得相当重要了,因此后面的章节中专门写了一个小节来讲解了不同方面的数据过滤,顺带讲一下Go对字符串的正则处理。 通过这一章能够让你了解客户端和服务器端是如何进行数据上的交互,客户端将数据传递给服务
这一章我们介绍了HTTP协议, DNS解析的过程, 如何用go实现一个简陋的web server。并深入到net/http包的源码中为大家揭开实现此server的秘密。 希望通过这一章的学习,你能够对Go开发Web有了初步的了解,我们也看到相应的代码了,Go开发Web应用是很方便的,同时又是相当的灵活。
这一章我们主要介绍了Go语言的一些语法,通过语法我们可以发现Go是多么的简单,只有二十五个关键字。让我们再来回顾一下这些关键字都是用来干什么的。 break default func interface select case defer go map struct chan else goto
这一章中我们主要介绍了如何安装Go,Go可以通过三种方式安装:源码安装、标准包安装、第三方工具安装,安装之后我们需要配置我们的开发环境,然后介绍了如何配置本地的$GOPATH,通过设置$GOPATH之后读者就可以创建项目,接着介绍了如何来进行项目编译、应用安装等问题,这些需要用到很多Go命令,所以接着就介绍了一些Go的常用命令工具,包括编译、安装、格式化、测试等命令,最后介绍了Go的开发工具,目前
本文介绍了sass最基本部分,你可以轻松地使用sass编写清晰、无冗余、语义化的css。对于sass提供的工具你已经有了一个比较深入的了解,同时也掌握了何时使用这些工具的指导原则。 变量是sass提供的最基本的工具。通过变量可以让独立的css值变得可重用,无论是在一条单独的规则范围内还是在整个样式表中。变量、混合器的命名甚至sass的文件名,可以互换通用_和-。同样基础的是sass的嵌套机制。嵌套
总结 这一章的实验指导中,我们成功单独生成 ELF 格式的用户程序,并打包进文件系统中;同时,从中读取,创建并运行用户进程;而为了可以让用户程序享受到操作系统的功能,我们使用系统调用为用户程序提供服务。
小结 本章我们的工作有: 在 QEMU 上挂载了存储设备 通过读取设备树找到了挂载的设备 实现了 virtio 驱动,把物理设备抽象为了驱动 进一步把驱动抽象给上层文件系统使用 调用 rcore-fs 的文件系统实现对文件的管理 现在,我们再也不会担心用户数据没有地方放置了,在下一个章节中,我们将实现用户进程,并让内核把用户进程加载和运行,实现和用户进程的交互。
小结 本章我们的工作有: 理清线程和进程的概念 通过设置 Context,可以构造一个线程的初始状态 通过 __restore 标签,直接进入第一个线程之中 用 Context 来保存进程的状态,从而实现在时钟中断时切换线程 实现内核栈,提供安全的中断处理空间 实现调度器,完成线程的调度 同时,可以发现我们这一章的内容集中在内核线程上面,对用户进程还没有过多的提及。而为了让用户进程可以在我们的系统
小结 回顾本章,我们理清了虚拟地址和物理地址的概念和关系;并利用页表完成虚拟地址到物理地址的映射;最后实现了内核空间段的重映射。 如果说本章和前一个章节是对空间的划分和管理,那么在下一个小节中,我们将实现对时间的划分和管理,也就是线程。
小结 本章完成了动态分配内存的管理和物理内存的管理,我们通过划分出一段静态内存为操作系统实现了动态内存的分配;通过页的管理模式,实现了物理页的分配器。 本章还只是物理内存的管理,后面为了进一步支持多线程的内存管理,我们将在下一章实现内存的虚拟化。 截至目前的所有代码在 lab-2 分支中
小结 本章完成了 RISC-V 中有关中断处理的部分,我们实现了中断相关的上下文保存和切换,使得原来正在的运行的程序不需要做任何处理就可以让操作系统处理好中断或异常。我们进一步完成了简单的断点中断和时钟中断,展示了中断处理的执行过程,为后面的章节(包括系统调用的处理)打下了一定的基础。 在下一章节中,我们将从物理内存的管理出发,让操作系统真正可以去管理我们的可以使用的内存。 截至目前的所有代码在
小结 本章作为一个预备实验,用 Rust 实现了一个最小化的内核,并成功通过 QEMU 中的 OpenSBI 启动了我们的内核。在下一章中,我们会和硬件进一步打交道,实现中断机制。
问题内容: 除了a 和Java 可以两次包含相同的元素外,a 和Java 之间在实践上还有什么区别吗?它们具有相同的方法。 (例如,是否给我更多选择来使用接受s但不接受s的库?) 编辑: 我可以认为至少有5种不同的情况来判断这个问题。其他人还能提出更多建议吗?我想确保我了解这里的微妙之处。 设计接受或参数的方法。更通用,并接受更多输入可能性。(如果我正在设计特定的类或接口,那么对我的消费者会更好,