摘要: 前面我们讲解了 Rust 中 所有权 和 借用 这两个重要概念,今天就接着来介绍一下,所有权系统三剑客的最后一位:生命周期。 在 Rust 中,每个变量都有严格的生命周期限定。生命周期的主要目的,是防止垂悬指针出现。 我们先来看下面一段程序: fn main() { let a; { let b = 阅读全文
posted @ 2020-01-18 15:05 liuhe688 阅读(314) 评论(0) 推荐(0) 编辑
摘要: 前面我们介绍了所有权的相关概念,下面用一段代码简单回顾一下: fn main() { let a = String::from("hello"); // a的所有权转移到了b let b = a; // b的所有权转移到了函数内部 let len = get_len(b); // 此时只能访问len 阅读全文
posted @ 2019-12-01 19:19 liuhe688 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 初学 Rust 的小伙伴,很容易就写出下面这样的代码: fn main() { let a = String::from("hello"); // ... // 将a赋给b let b = a; // ... // 编译报错 变量a不能继续使用 println!("{} {}", a, b); } 阅读全文
posted @ 2019-11-28 19:17 liuhe688 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 是时候介绍一下函数了。 前面我们梳理基础知识点时,都是将代码放入一个 main 函数中来演示的,一个 fn 关键字,加上一个 main 作为函数名,完事儿: // 入口函数 fn main() { println!("hello world"); } 如果你写过 Java 代码,就绝对能感受到 Ru 阅读全文
posted @ 2019-11-25 19:16 liuhe688 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 在上一篇中,我们介绍了 Rust 基础类型的相关内容,限于篇幅,有些内容没有覆盖到,今天就来做个补充。 一、数字类型字面量 在声明数字类型字面量时,Rust 提供了 类型后缀 的表示方法,只需要在数字后面加上对应的类型即可,另外,Rust 也允许在数字中加入 下划线 符号,可以用来间隔值和类型,也可 阅读全文
posted @ 2019-11-23 19:15 liuhe688 阅读(516) 评论(0) 推荐(0) 编辑
摘要: 前面我们讲解了 Rust 变量的相关内容,其中涉及到了变量类型,今天就来介绍一下基础类型吧。 Rust 包含以下几种基础类型: 布尔类型 字符类型 整数类型 浮点数类型 数组类型 切片类型 元组类型 字符串类型 下面我们就来逐个地进行介绍: 一、布尔类型 布尔类型使用 bool 关键字来表示,它仅有 阅读全文
posted @ 2019-11-20 19:08 liuhe688 阅读(716) 评论(0) 推荐(0) 编辑
摘要: 我们写代码时业务逻辑的实现,依赖于编程语言的流程控制结构。今天来介绍一下 Rust 中的流程控制结构。 if语句 if 语句是最基本的控制结构了,Rust 的 if 语句如下面代码所示: fn main() { let number = 3; if number > 5 { println!("nu 阅读全文
posted @ 2019-11-18 19:07 liuhe688 阅读(503) 评论(0) 推荐(0) 编辑
摘要: 变量的概念来源于数学,在计算机语言中,它是数据存取的基本单位。 在 Rust 中,变量有很多不同于其他语言的地方,今天就来简单介绍一下。 变量声明 直接看下面代码: fn main() { // 使用let关键字声明一个变量 let a = 1; // 也可以附带类型信息 let b: i32 = 阅读全文
posted @ 2019-11-15 19:06 liuhe688 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 最早听说 Rust 这门编程语言是在一年前。当时,Node 创始人 Ryan Dahl 宣布建立一个 Deno 的项目,底层基于 Go 语言来实现,上层基于 V8 实现一个 TypeScript 的 Runtime,感觉挺有意思的,不时地还关注一下。 因为很早就看过 Ryan 对比 Go 和 Nod 阅读全文
posted @ 2019-11-10 19:04 liuhe688 阅读(587) 评论(0) 推荐(0) 编辑
摘要: 在上一篇文章中,我们介绍了常用的文件读写操作,今天接着来研究一下,除了读写以外的其他常见文件操作。 一、创建目录: package main import ( "fmt" "os" ) func main() { // 创建单个目录 os.Mkdir("go", os.ModePerm) // 创建 阅读全文
posted @ 2019-09-11 09:07 liuhe688 阅读(698) 评论(0) 推荐(0) 编辑
摘要: Go 语言提供了很多文件操作的支持,在不同场景下,有对应的处理方式,今天就来系统地梳理一下,几种常用的文件读写的形式。 一、读取文件内容 1、按字节读取文件 这种方式是以字节为单位来读取,相对底层一些,代码量也较大,我们看下面代码: // read-bytes.go package main imp 阅读全文
posted @ 2019-08-29 07:21 liuhe688 阅读(12354) 评论(0) 推荐(1) 编辑
摘要: GET 和 POST 是我们最常用的两种请求方式,今天结合前端 axios 请求库来讲一讲,如何在 golang 服务中,正确接收这两种请求的参数信息。 一、搭建一个简单的服务 首先,我们来创建一个最简单的静态页面,将 axios 引进来: <!DOCTYPE html> <html> <head> 阅读全文
posted @ 2019-07-05 13:29 liuhe688 阅读(28357) 评论(0) 推荐(1) 编辑
摘要: 前面我们介绍了 Marshal 和 Unmarshal 方法,今天再解一下另外两个 API:Encoder 和 Decoder。 Encoder Encoder 主要负责将结构对象编码成 JSON 数据,我们可以调用 json.NewEncoder(io.Writer) 方法获得一个 Encoder 阅读全文
posted @ 2019-07-04 13:36 liuhe688 阅读(6414) 评论(0) 推荐(1) 编辑
摘要: 上次我们介绍了 Go 语言中序列化和反序列化 JSON 数据的两个方法 Marshal() 和 Unmarshal(),并以示例演示了它们的用法。 我们在例子中看到,需要事先声明好对应的结构体,才能跟 JSON 字段映射起来。 有的时候,如果 JSON 数据的定义过于复杂,我们需要一种更加灵活的方式 阅读全文
posted @ 2019-06-04 08:05 liuhe688 阅读(2834) 评论(0) 推荐(1) 编辑
摘要: JSON 作为目前最流行的数据传输格式, 相信每个程序员都跟它打过交道吧。使用 Go 语言时,也不可避免的要操作 JSON 数据,令人惊喜的是,Go 内置了序列化和反序列化 JSON 的功能,今天就来总结一下。 序列化是将结构对象转为 JSON 字符串,反序列化是将 JSON 字符串转为结构对象,它 阅读全文
posted @ 2019-06-03 08:03 liuhe688 阅读(7640) 评论(0) 推荐(1) 编辑