前言 先回顾下前文中介绍了哪些内容: 使用@nestjs/cli创建和管理Nest应用 Hello,World示例代码分析 Nest基本概念:模块,控制器,服务 常用的装饰器:@Module、@Controller、@Get、@Injectable Nest目录结构分析 @nest/cli脚手架的命令 本文先不继续讲解Nest中的内容,而是打算介绍TypeScript中的两个语法:类和装饰器,帮助新手理解Nest中代码的写法。 如果你对TypeScript已经很熟悉,根据自己实际情况有选择的阅读即可。 类Class NestJS支持面向对象编程,也支持函数式编程。但在实际开发中还是以面向对...

在正式使用NestJS进行开发之前,先来了解下Nest应用的目录结构,和一些常用的脚本命令。 工程目录 下面是使用@nest/cli创建的Nest项目的目录结构。 上篇文章中介绍了src目录以及目录下各个文件的作用。下面是对其他目录和文件的说明: 目录/文件 说明 test目录 存放测试文件 .eslintrc.js ESLint的配置文件 .gitignore 用来配置不需要被Git追踪的文件 .prettierrc Prettier的配置文件 nest-cli.json Nest项目的配置文件 package.json 记录项目信息,比如依赖项,sc...

  oS1xgoxjr0QZ   2023年12月10日   34   0   0 Nest.jsNode.jsNest.jsNode.js

初识NestJS 先来看下官网对NestJS的介绍。 Nest(NestJS)是一个用于构建高效、可扩展的Node.js服务器端应用程序的开发框架。它利用JavaScript的渐进增强的能力,使用并完全支持TypeScript(仍然允许开发者使用纯JavaScript进行开发),并结合了OOP(面向对象编程)、FP(函数式编程)和FRP(函数响应式编程)。 在底层,Nest构建在强大的HTTP服务器框架上,例如Express(默认),并且还可以通过配置从而使用Fastify! Nest在这些常见的Node.js框架(Express/Fastify)之上提高了一个抽象级别,但仍然向开发者直接暴...

Rust简介 Rust的官方网站是https://www.rust-lang.org/。 可以看到,Rust的主要优势就是高性能、可靠性和生产力。 Rust是一门低级语言,是更偏向计算机底层的一门编程语言,它提供了更多更底层的抽象概念供开发者使用。这也提高了上手它的门槛。 一名合格的码农(都码农了还啥合格不合格的),有必要掌握一门吃饭的家伙,比如Java,JavaScript等,也有必要掌握一门低级语言,来加深对计算机科学的一点认知。 Rust环境安装 以Windows为例。 官网下载安装包,会检测当前系统,然后提示适合的安装方式: 下载好安装包,双击打开安装,会启动一个命令行窗口: 安装程...

  oS1xgoxjr0QZ   2023年11月02日   35   0   0 Rust

声明变量 Rust是强类型语言,同时具有自动判断变量类型的能力。这一点和Typescript有点相似。 Rust语言中有变量和常量之分,分别通过let和const关键字进行声明。 let变量 Rust中的变量分为可变变量和不可变变量。 使用let关键字声明的变量默认是不可变变量,即赋值后不能再修改: //先声明,会赋值 letnum; num=10; //声明时赋值 letname="kw"; println!(name); letnum=10; num=20; //error[E0384]:cannotassigntwicetoimmutablevariable`num` //无...

  oS1xgoxjr0QZ   2023年11月02日   21   0   0 Rust

复合数据类型 复合类型(compoundtype)可以将多个不同类型的值组合为一个类型。 Rust提供了两种内置的基础复合类型:元组(tuple)和数组(array)。 元组类型 声明元组 元组(tuple)类型,就是将其他类型的值,使用圆括号包裹起来,组内的各个值通过,进行分割。 //定义了一个元祖类型,包含4个值 lettup=(10,10.1,'a',true); 在声明元素类型的变量时,可以指定类型。元祖类型是通过圆括号语法声明: lettup:(i32,f64,char,bool)=(10,10.1,'a',true); 访问 通过解构赋值/模式匹配的方式,来获得元祖内的值:...

  oS1xgoxjr0QZ   2023年11月02日   22   0   0 Rust

函数 正如HelloWorld示例中的那样: fnmain(){ println!("Hello,world!"); } Rust中使用关键字fn来声明一个函数。一般函数都会有入参和返回值。函数体包含了一系列的语句和表达式。 函数返回值可以使用return语句,也可以使用表达式。 函数的名字和变量一样,遵循蛇形命名法(snakecase): fngetPersonList(){}//× fnget_person_list(){}//√ 函数可以定义在任意位置,好似JS中的函数声明提升。 Rust是强类型语言,声明函数时如果有参数,参数必须指定类型: fnmain(){ add(10,...

  oS1xgoxjr0QZ   2023年11月02日   37   0   0 Rust

流程控制 Rust的流程控制分为两类: 条件判断(if) 循环(for、loop、while) 主要涉及到四个语法:if、for、loop和while。 if条件判断 和大多数语言不同的是,Rust的条件判断并不需要加上小括号(),是可以省略的。 fnmain(){ letnum=10; ifnum>8{ println!("num大于8"); }else{ println!("num小于8"); } } 如果写上括号,编译器会提示“warning:unnecessaryparenthesesaroundifcondition”,也就是不必要的插入语。 同时,Rust中也不存在强...

  oS1xgoxjr0QZ   2023年11月02日   40   0   0 Rust条件判断

今天学习的内容是Rust中的数组类型。 创建数组 数组是一种长度固定,元素类型相同的数据存储结构。 JS中的数组是用对象实现的,长度可变,元素类型不限,和Rust有很大区别。 在Rust中使用[T;N]表示数组类型,其中T表示数组内元素的类型,N表示数组的长度,比如定义一个数组,元素类型是u32,长度是5,即有5个元素: letarr:[u32;5]=[1,2,3,4,5]; 如果数组的初始化元素的值都相同,则可以使用简化写法: //创建一个元素均为1的,长度为5的数组 letarr:[u32;5]=[1;5]; 使用数组 要使用数组中的元素,可以通过下标索引。数组的索引从0开始: ...

  oS1xgoxjr0QZ   2023年11月02日   39   0   0 数组Rust

前言 本文介绍了Rust中的结构体类型。 结构体 结构体是一种用户自定义的数据类型,它是多种不同数据类型的组合。 结构体类型使用关键字struct声明,有三种类型的结构体: 无字段的单元结构 元组结构 经典的类C结构 结构体类型的命名采用大驼峰命名规则,下面看具体的介绍。 单元结构体(unitstruct) 这种结构体类型没有字段定义,使用关键字struct进行声明,随后是其名称,并用分号作为结尾。比如: structUnit; fnmain(){ letunit=Unit; } 这种结构体类型用的非常少。 元组结构体(tuplestruct) 同样使用struct进行声明,后面跟类...

  oS1xgoxjr0QZ   2023年11月02日   25   0   0 Rust结构体

枚举类型 枚举类型也叫枚举,它表示的是一种多个类型的“或”的关系。 使用enum关键字来声明一个枚举类型,枚举类型的成员称为变体(variant)。 枚举有多种不同的写法,包括: 不带值的枚举 带值的枚举 带参数的枚举 定义枚举类型 比如,定义一个行星类型的枚举,它的成员有两个:Mars和Earth: enumPlanet{ Mars, Earth, } 最后一个变体后面的逗号可以省略不写。 带枚举值的枚举 在声明枚举类型时,还可以显式地给成员赋值。上面的Planet类型就可以写成: enumPlanet{ Mars=0, Earth=1, } 再比如定义一个表示HTTP响应状态...

  oS1xgoxjr0QZ   2023年11月02日   20   0   0 Rust枚举类型

所有权是Rust的核心特性之一。 Rust和其他语言相比最出色的就是安全性。这个安全性就是建立在所有权之上。 常见的内存管理机制 程序运行在内存之中,所有的编程语言都有自己的一套内存管理的机制。 对于JSer来说,由于V8引擎使用的是GC垃圾回收机制,并不需要开发者介入,所以JSer对于内存的管理的概念通常会比较陌生。 下面是两种常见的内存管理机制: Malloc和free:采用malloc和free机制的代表是C语言,需要开发者手动管理内存,使用时申请,不用时手动释放。 GC:采用GC的语言有Golang,Java,JavaScript等。开发者只需要申请内存拿来用,不需要手动管理。垃圾回...

  oS1xgoxjr0QZ   2023年11月02日   23   0   0 Rust

今天学习的内容是Rust中的所有权的唯一性和所有权的转移。 唯一性 上篇文章介绍了一些所有权的概念,包括: 每个值都有一个对应的变量作为它的所有者,该变量拥有对这个值的所有权。 当变量离开自己的作用域时,它的值就会被回收和释放掉。 关于所有权还有另一个特性,就是同一时间一个值只能有一个所有者。比如这段代码: fnmain(){ lets1=String::from("hello"); lets2=s1; println!("{}",s1); } 运行这段代码,会报错: 报错信息borrowofmovedvalue:s1的意思是变量s1的值已经被移动了,导致s1现在没有值,所以打印不出...

  oS1xgoxjr0QZ   2023年11月02日   29   0   0 Rust

今天学习的内容是Rust中所有权的另一个知识点,借用和引用。 先引入一个场景,有一个reverse函数,用于将一个字符串值进行反转: fnreverse(s:String)->String{ s.chars().rev().collect() } fnmain(){ lets1=String::from("hello"); lets2=reverse(s1); println!("{}{}",s1,s2); } 按照前面所学的所有权的知识,在调用reverse时,变量s1对字符串值的所有权就交给了函数,所以当前作用域下s1不再有效,打印s1就会报错。 那么如果s1还有用处,就是需...

  oS1xgoxjr0QZ   2023年11月02日   27   0   0 Rust

今天学习的内容是Rust中的切片类型。 前面学习所有权时,学习了引用类型,它的特点是不拥有值的所有权。除了引用,Rust中的切片(slice)类型,同样不持有值的所有权。 切片类型是对一个数组、字符串的引用片段。 切片有利于安全有效地访问数据的一部分,而不需要拷贝原始数据的内容。 切片在编译的时候,它的长度是未知的,在底层实现上,一个切片保存着两个usize类型的成员,第一个成员指向切片的起始位置的指针,第二个成员表示切片的长度。 字符串切片 字符串切片是指向String对象中某个连续部分的引用。 创建一个字符串切片,使用&表示,在方括号中设置切片的范围区间,格式为[starting_...

  oS1xgoxjr0QZ   2023年11月02日   46   0   0 Rust

字符串类型是一个非常基础和重要的数据类型。 Rust中表示字符串类型的方式有多种,和其他语言有很大的区别。本文讲述最常用的两种,分别是&str和String类型。 &str 直接使用字符串字面量声明的字符串类型,属于&str字符串引用类型。 lets="helloworld"; 变量s就是&str类型。 字符串引用类型的内容保存在数据段中,数据段可以理解为一个存储数据且数据不发生改变的区域。比如示例中这个字符串值,在程序的运行过程中是不会发生改变的。 String 有多种方式定义String类型的字符串,最常用的是String::from。 letstr=...

  oS1xgoxjr0QZ   2023年11月02日   33   0   0 Rust字符串
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~