
📅 2020-07-06
今天来学习rust中的std::str::FromStr
这个trait。
FromStr
是rust标准库中定义的trait,当一个类型实现FromStr
trait后,调用字符串的泛型函数str.parse()
就可以很方便的实现字符串到某个具体类型的转换。
注意FromStr
没有生命周期参数,因此只能解析本身不包含生命周期的类型。例如,可以解析实现FromStr的i32
,但不能解析&i32
,可以解析包含i32
的struct,但不能解析包含&i32
的struct。
...📅 2020-07-05
很多编程语言都支持泛型的特性,泛型是对具体类型或属性的抽象替代,可以实现在编写代码和编译代码时无需知道其在运行时具体类型的特性。
rust也是支持泛型的,而且rust中使用泛型的代码相比使用具体类型的代码几乎没有任何性能上的损耗,rust在编译时使会进行泛型代码的Monomorphization
来保障效率。
Monomorphization会在编译时填充需要使用的具体类型,将通用代码转换回特定类型的代码。
...📅 2020-07-04
在Rust中提到字符串,通常指的是rust核心语言中的字符串类型str
(字符串slice)和rust标准库中的String
类型。
除了str
和String
这两个常用的字符串类型,在标准库中还有一些其他的字符串类型,例如OsString
、OsStr
、CString
、CStr
。
本文将介绍str
和String
两个字符串类型。
...📅 2020-07-03
rust与其他编程语言一样支持哈希Map这种数据结构。
HashMap<K, V>
定义在rust标准库的collections
moduleuse
将其引入作用域。
下面演示HashMap最基本的API使用。
HashMap的创建和初始化
#
下面的代码演示了使用new
创建了一个空的HashMap,使用insert
向HashMap中添加元素。
...📅 2020-07-02
1.包、Crate和模块
#
rust的模块系统包括:
- 包: cargo的一个功能,它允许你构建、测试、分享crate。一个包可以包含多个二进制crate和一个可选的库crate
- crate: 一个模块的树形结构,它形成了库或二进制项目
- 模块(mod)和
use
: 模块通过use来使用,允许你控制作用域和路径的私有性 - 路径(path): 一个命名例如结构体、函数或模块等项的方式
1.1 包和crate
#
crate是一个二进制项或库。
crate root
是一个源文件,crate 是一个二进制项或者库。crate root 是一个源文件,Rust 编译器以它为起始点,并构成你的 crate 的根模块。
crate将一个作用域相关的功能分组到一起,使得这些功能可以方便的在多个项目间共享。
...📅 2020-07-01
1.语言环境安装和开发工具准备
#
1.1 Rust语言环境安装
#
1.2 开发工具VSCode + Rust扩展
#
1.3 HelloWorld
#
cargo是rust的构建系统和包管理器,使用cargo可以创建rust项目。
创建项目:
1cargo new c01_hello
2Created binary (application) `c01_hello` package
项目目录结构如下:
...📅 2020-06-04
因为kong的社区版不提供dashboard,本文将介绍kong的第三方开源的图形化管理工具konga在Kubernetes集群上的部署安装。
konga是一个非官方的第三方开源的kong的图形化管理工具,konga需要使用kong的Admin API,konga具有如下特性:
...📅 2020-06-03
本文将使用helm在Kubernetes集群中部署微服务API网关kong,并将其用作Kubernetes的Ingress Controller。
Kong官方单独维护了一个项目叫Kong for Kubernetes
,项目的地址是https://github.com/Kong/kubernetes-ingress-controller。
Kong for Kubernetes
是一个Kubernetes的Ingress Controller,通过插件架构提供API管理能力。
Kong官方另外提供了一个Helm Chart,使用Helm安装这个Chart可以在Kubernetes集群上运行Kong所需的所有组件。
...📅 2020-06-02
kong是一个云原生的、高性能的、可扩展的API网关(分布式微服务抽象层)。
kong基于openresty, nginx+lua模块开发,其核心价值就是高性能和可扩展性。
kong的基本运行情况如下图所示,kong可以通过充当微服务请求的网关,
同时通过插件提供负载均衡、日志记录、身份认证、速率限制(rate-limiting)、转换(transformations)等功能。
...📅 2020-04-28
grpcurl是一个命令行工具,使用它可以在命令行中访问gRPC服务,就像使用curl
访问http服务一样。
准备: 在gRPC服务中注册reflection服务
#
gRPC服务是使用Protobuf(PB)协议的,而PB提供了在运行时获取Proto定义信息的反射功能。grpc-go中的"google.golang.org/grpc/reflection"
包就对这个反射功能提供了支持。
这里以grpc-go官方的helloword为例,代码结构如下:
1grpc-hello
2├── go.mod
3├── go.sum
4├── main.go
5└── proto
6 ├── doc.go
7 ├── helloworld.pb.go
8 └── helloworld.proto
helloworld.proto:
...