rust语言基础学习: rust中的泛型
📅 2020-07-05
很多编程语言都支持泛型的特性,泛型是对具体类型或属性的抽象替代,可以实现在编写代码和编译代码时无需知道其在运行时具体类型的特性。
rust也是支持泛型的,而且rust中使用泛型的代码相比使用具体类型的代码几乎没有任何性能上的损耗,rust在编译时使会进行泛型代码的Monomorphization
来保障效率。
Monomorphization会在编译时填充需要使用的具体类型,将通用代码转换回特定类型的代码。
很多编程语言都支持泛型的特性,泛型是对具体类型或属性的抽象替代,可以实现在编写代码和编译代码时无需知道其在运行时具体类型的特性。
rust也是支持泛型的,而且rust中使用泛型的代码相比使用具体类型的代码几乎没有任何性能上的损耗,rust在编译时使会进行泛型代码的Monomorphization
来保障效率。
Monomorphization会在编译时填充需要使用的具体类型,将通用代码转换回特定类型的代码。
在Rust中提到字符串,通常指的是rust核心语言中的字符串类型str
(字符串slice)和rust标准库中的String
类型。
除了str
和String
这两个常用的字符串类型,在标准库中还有一些其他的字符串类型,例如OsString
、OsStr
、CString
、CStr
。
本文将介绍str
和String
两个字符串类型。
rust与其他编程语言一样支持哈希Map这种数据结构。
HashMap<K, V>
定义在rust标准库的collections
moduleuse
将其引入作用域。
下面演示HashMap最基本的API使用。
下面的代码演示了使用new
创建了一个空的HashMap,使用insert
向HashMap中添加元素。
rust的模块系统包括:
use
: 模块通过use来使用,允许你控制作用域和路径的私有性crate是一个二进制项或库。
crate root
是一个源文件,crate 是一个二进制项或者库。crate root 是一个源文件,Rust 编译器以它为起始点,并构成你的 crate 的根模块。
crate将一个作用域相关的功能分组到一起,使得这些功能可以方便的在多个项目间共享。
MacOS下安装rust:
1brew install rustup
2
3rustup-init
4
5source ~/.cargo/env
1rustc --version
2
3cargo --version
VSCode中安装Rust扩展, 可参考https://code.visualstudio.com/docs/languages/rust。
...因为kong的社区版不提供dashboard,本文将介绍kong的第三方开源的图形化管理工具konga在Kubernetes集群上的部署安装。 konga是一个非官方的第三方开源的kong的图形化管理工具,konga需要使用kong的Admin API,konga具有如下特性:
...本文将使用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所需的所有组件。
kong是一个云原生的、高性能的、可扩展的API网关(分布式微服务抽象层)。 kong基于openresty, nginx+lua模块开发,其核心价值就是高性能和可扩展性。
kong的基本运行情况如下图所示,kong可以通过充当微服务请求的网关, 同时通过插件提供负载均衡、日志记录、身份认证、速率限制(rate-limiting)、转换(transformations)等功能。
...grpcurl是一个命令行工具,使用它可以在命令行中访问gRPC服务,就像使用curl
访问http服务一样。
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:
...今天继续打卡学习极客时间上的专栏“设计模式之美”, 本篇是专栏第23, 24节的学习笔记。
这两节分上、下两节主要介绍了对于"业务系统"如何做需求分析、系统设计、代码实现,并且遵循前面已经学过的设计原则。 原文中以一个"积分兑换系统"为实战案例进行介绍。
...