Rust vs Go:常用语法对比(四)

题图来自 Go vs. Rust performance comparison: The basics
61. Get current date
获取当前时间
package main
import (
"fmt"
"time"
)
func main() {
d := time.Now()
fmt.Println("Now is", d)
// The Playground has a special sandbox, so you may get a Time value fixed in the past.
}
Now is 2009-11-10 23:00:00 +0000 UTC m=+0.000000001
extern crate time;
let d = time::now();
or
use std::time::SystemTime;
fn main() {
let d = SystemTime::now();
println!("{:?}", d);
}
SystemTime { tv_sec: 1526318418, tv_nsec: 699329521 }
62. Find substring position
字符串查找
查找子字符串位置
package main
import (
"fmt"
"strings"
)
func main() {
x := "été chaud"
{
y := "chaud"
i := strings.Index(x, y)
fmt.Println(i)
}
{
y := "froid"
i := strings.Index(x, y)
fmt.Println(i)
}
}
i is the byte index of y in x, not the character (rune) index. i will be -1 if y is not found in x.
6
-1
fn main() {
let x = "été chaud";
let y = "chaud";
let i = x.find(y);
println!("{:?}", i);
let y = "froid";
let i = x.find(y);
println!("{:?}", i);
}
Some(6)
None
63. Replace fragment of a string
替换字符串片段
package main
import (
"fmt"
"strings"
)
func main() {
x := "oink oink oink"
y := "oink"
z := "moo"
x2 := strings.Replace(x, y, z, -1)
fmt.Println(x2)
}
moo moo moo
fn main() {
let x = "lorem ipsum dolor lorem ipsum";
let y = "lorem";
let z = "LOREM";
let x2 = x.replace(&y, &z);
println!("{}", x2);
}
LOREM ipsum dolor LOREM ipsum
64. Big integer : value 3 power 247
超大整数
package main
import "fmt"
import "math/big"
func main() {
x := new(big.Int)
x.Exp(big.NewInt(3), big.NewInt(247), nil)
fmt.Println(x)
}
7062361041362837614435796717454722507454089864783271756927542774477268334591598635421519542453366332460075473278915787
extern crate num;
use num::bigint::ToBigInt;
fn main() {
let a = 3.to_bigint().unwrap();
let x = num::pow(a, 247);
println!("{}", x)
}
7062361041362837614435796717454722507454089864783271756927542774477268334591598635421519542453366332460075473278915787
65. Format decimal number
格式化十进制数
package main
import "fmt"
func main() {
x := 0.15625
s := fmt.Sprintf("%.1f%%", 100.0*x)
fmt.Println(s)
}
15.6%
fn main() {
let x = 0.15625f64;
let s = format!("{:.1}%", 100.0 * x);
println!("{}", s);
}
15.6%
66. Big integer exponentiation
大整数幂运算
package main
import "fmt"
import "math/big"
func exp(x *big.Int, n int) *big.Int {
nb := big.NewInt(int64(n))
var z big.Int
z.Exp(x, nb, nil)
return &z
}
func main() {
x := big.NewInt(3)
n := 5
z := exp(x, n)
fmt.Println(z)
}
243
extern crate num;
use num::bigint::BigInt;
fn main() {
let x = BigInt::parse_bytes(b"600000000000", 10).unwrap();
let n = 42%
67. Binomial coefficient "n choose k"
Calculate binom(n, k) = n! / (k! * (n-k)!). Use an integer type able to handle huge numbers.
二项式系数“n选择k”
package main
import (
"fmt"
"math/big"
)
func main() {
z := new(big.Int)
z.Binomial(4, 2)
fmt.Println(z)
z.Binomial(133, 71)
fmt.Println(z)
}
6
555687036928510235891585199545206017600
extern crate num;
use num::bigint::BigInt;
use num::bigint::ToBigInt;
use num::traits::One;
fn binom(n: u64, k: u64) -> BigInt {
let mut res = BigInt::one();
for i in 0..k {
res = (res * (n - i).to_bigint().unwrap()) /
(i + 1).to_bigint().unwrap();
}
res
}
fn main() {
let n = 133;
let k = 71;
println!("{}", binom(n, k));
}
555687036928510235891585199545206017600
68. Create a bitset
创建位集合
package main
import (
"fmt"
"math/big"
)
func main() {
var x *big.Int = new(big.Int)
x.SetBit(x, 42, 1)
for _, y := range []int{13, 42} {
fmt.Println("x has bit", y, "set to", x.Bit(y))
}
}
x has bit 13 set to 0
x has bit 42 set to 1
or
package main
import (
"fmt"
)
const n = 1024
func main() {
x := make([]bool, n)
x[42] = true
for _, y := range []int{13, 42} {
fmt.Println("x has bit", y, "set to", x[y])
}
}
x has bit 13 set to false
x has bit 42 set to true
or
package main
import (
"fmt"
)
func main() {
const n = 1024
x := NewBitset(n)
x.SetBit(13)
x.SetBit(42)
x.ClearBit(13)
for _, y := range []int{13, 42} {
fmt.Println("x has bit", y, "set to", x.GetBit(y))
}
}
type Bitset []uint64
func NewBitset(n int) Bitset {
return make(Bitset, (n+63)/64)
}
func (b Bitset) GetBit(index int) bool {
pos := index / 64
j := index % 64
return (b[pos] & (uint64(1) << j)) != 0
}
func (b Bitset) SetBit(index int) {
pos := index / 64
j := index % 64
b[pos] |= (uint64(1) << j)
}
func (b Bitset) ClearBit(index int) {
pos := index / 64
j := index % 64
b[pos] ^= (uint64(1) << j)
}
x has bit 13 set to false
x has bit 42 set to true
fn main() {
let n = 20;
let mut x = vec![false; n];
x[3] = true;
println!("{:?}", x);
}
[false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]
69. Seed random generator
Use seed s to initialize a random generator.
If s is constant, the generator output will be the same each time the program runs. If s is based on the current value of the system clock, the generator output will be different each time.
随机种子生成器
package main
import (
"fmt"
"math/rand"
)
func main() {
var s int64 = 42
rand.Seed(s)
fmt.Println(rand.Int())
}
3440579354231278675
or
package main
import (
"fmt"
"math/rand"
)
func main() {
var s int64 = 42
r := rand.New(rand.NewSource(s))
fmt.Println(r.Int())
}
3440579354231278675
use rand::{Rng, SeedableRng, rngs::StdRng};
fn main() {
let s = 32;
let mut rng = StdRng::seed_from_u64(s);
println!("{:?}", rng.gen::<f32>());
}
0.35038823
70. Use clock as random generator seed
Get the current datetime and provide it as a seed to a random generator. The generator sequence will be different at each run.
使用时钟作为随机生成器的种子
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano())
// Well, the playground date is actually fixed in the past, and the
// output is cached.
// But if you run this on your workstation, the output will vary.
fmt.Println(rand.Intn(999))
}
524
or
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
// Well, the playground date is actually fixed in the past, and the
// output is cached.
// But if you run this on your workstation, the output will vary.
fmt.Println(r.Intn(999))
}
524
use rand::{Rng, SeedableRng, rngs::StdRng};
use std::time::SystemTime;
fn main() {
let d = SystemTime::now()
.duration_since(SystemTime::UNIX_EPOCH)
.expect("Duration since UNIX_EPOCH failed");
let mut rng = StdRng::seed_from_u64(d.as_secs());
println!("{:?}", rng.gen::<f32>());
}
0.7326781
71. Echo program implementation
Basic implementation of the Echo program: Print all arguments except the program name, separated by space, followed by newline.
The idiom demonstrates how to skip the first argument if necessary, concatenate arguments as strings, append newline and print it to stdout.
实现 Echo 程序
package main
import "fmt"
import "os"
import "strings"
func main() {
fmt.Println(strings.Join(os.Args[1:], " "))
}
use std::env;
fn main() {
println!("{}", env::args().skip(1).collect::<Vec<_>>().join(" "));
}
or
use itertools::Itertools;
println!("{}", std::env::args().skip(1).format(" "));
74. Compute GCD
Compute the greatest common divisor x of big integers a and b. Use an integer type able to handle huge numbers.
计算大整数a和b的最大公约数x。使用能够处理大数的整数类型。
package main
import "fmt"
import "math/big"
func main() {
a, b, x := new(big.Int), new(big.Int), new(big.Int)
a.SetString("6000000000000", 10)
b.SetString("9000000000000", 10)
x.GCD(nil, nil, a, b)
fmt.Println(x)
}
3000000000000
extern crate num;
use num::Integer;
use num::bigint::BigInt;
fn main() {
let a = BigInt::parse_bytes(b"6000000000000", 10).unwrap();
let b = BigInt::parse_bytes(b"9000000000000", 10).unwrap();
let x = a.gcd(&b);
println!("{}", x);
}
3000000000000
75. Compute LCM
计算大整数a和b的最小公倍数x。使用能够处理大数的整数类型。
Compute the least common multiple x of big integers a and b. Use an integer type able to handle huge numbers.
package main
import "fmt"
import "math/big"
func main() {
a, b, gcd, x := new(big.Int), new(big.Int), new(big.Int), new(big.Int)
a.SetString("6000000000000", 10)
b.SetString("9000000000000", 10)
gcd.GCD(nil, nil, a, b)
x.Div(a, gcd).Mul(x, b)
fmt.Println(x)
}
18000000000000
extern crate num;
use num::bigint::BigInt;
use num::Integer;
fn main() {
let a = BigInt::parse_bytes(b"6000000000000", 10).unwrap();
let b = BigInt::parse_bytes(b"9000000000000", 10).unwrap();
let x = a.lcm(&b);
println!("x = {}", x);
}
x = 18000000000000
76. Binary digits from an integer
Create the string s of integer x written in base 2.
E.g. 13 -> "1101"
将十进制整数转换为二进制数字
package main
import "fmt"
import "strconv"
func main() {
x := int64(13)
s := strconv.FormatInt(x, 2)
fmt.Println(s)
}
1101
or
package main
import (
"fmt"
"math/big"
)
func main() {
x := big.NewInt(13)
s := fmt.Sprintf("%b", x)
fmt.Println(s)
}
1101
fn main() {
let x = 13;
let s = format!("{:b}", x);
println!("{}", s);
}
1101
77. SComplex number
Declare a complex x and initialize it with value (3i - 2). Then multiply it by i.
复数
package main
import (
"fmt"
"reflect"
)
func main() {
x := 3i - 2
x *= 1i
fmt.Println(x)
fmt.Print(reflect.TypeOf(x))
}
(-3-2i)
complex128
extern crate num;
use num::Complex;
fn main() {
let mut x = Complex::new(-2, 3);
x *= Complex::i();
println!("{}", x);
}
-3-2i
78. "do while" loop
Execute a block once, then execute it again as long as boolean condition c is true.
循环执行
package main
import (
"fmt"
"math/rand"
)
func main() {
for {
x := rollDice()
fmt.Println("Got", x)
if x == 3 {
break
}
}
}
func rollDice() int {
return 1 + rand.Intn(6)
}
Go has no do while loop, use the for loop, instead.
Got 6
Got 4
Got 6
Got 6
Got 2
Got 1
Got 2
Got 3
or
package main
import (
"fmt"
"math/rand"
)
func main() {
for done := false; !done; {
x := rollDice()
fmt.Println("Got", x)
done = x == 3
}
}
func rollDice() int {
return 1 + rand.Intn(6)
}
Got 6
Got 4
Got 6
Got 6
Got 2
Got 1
Got 2
Got 3
loop {
doStuff();
if !c { break; }
}
Rust has no do-while loop with syntax sugar. Use loop and break.
79. Convert integer to floating point number
Declare floating point number y and initialize it with the value of integer x .
整型转浮点型
声明浮点数y并用整数x的值初始化它。
package main
import (
"fmt"
"reflect"
)
func main() {
x := 5
y := float64(x)
fmt.Println(y)
fmt.Printf("%.2f\n", y)
fmt.Println(reflect.TypeOf(y))
}
5
5.00
float64
fn main() {
let i = 5;
let f = i as f64;
println!("int {:?}, float {:?}", i, f);
}
int 5, float 5.0
80. Truncate floating point number to integer
Declare integer y and initialize it with the value of floating point number x . Ignore non-integer digits of x . Make sure to truncate towards zero: a negative x must yield the closest greater integer (not lesser).
浮点型转整型
package main
import "fmt"
func main() {
a := -6.4
b := 6.4
c := 6.6
fmt.Println(int(a))
fmt.Println(int(b))
fmt.Println(int(c))
}
-6
6
6
fn main() {
let x = 41.59999999f64;
let y = x as i32;
println!("{}", y);
}
41
本文由 mdnice 多平台发布
相关文章:

Rust vs Go:常用语法对比(四)
题图来自 Go vs. Rust performance comparison: The basics 61. Get current date 获取当前时间 package mainimport ( "fmt" "time")func main() { d : time.Now() fmt.Println("Now is", d) // The Playground has a special sandbox, so you …...
c++ 派生类 文本查询程序再探
Query_base类和Query类 //这是一个抽象基类,具体的查询类型从中派生,所有成员都是private的 class Query_base {friend class Query;protected:using line_no TextQuery::line_no;//用于level函数virtual ~Query_base() default;private://eval返回与…...

17. 电话号码的字母组合
题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits "23" …...

Redis 基础知识和核心概念解析:理解 Redis 的键值操作和过期策略
🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~ἳ…...

Jenkins中sh函数的用法
在Jenkins的Pipeline中,sh函数的用法 用法一 单个命令字符串包括使用,示例如下: sh echo "Hello, Jenkins!"用法二 多个命令字符串包括命令列表使用,示例如下: sh echo "Step 1" echo "…...

Android 之 Canvas API 详解 (Part 3) Matrix 和 drawBitmapMesh
本节引言: 在Canvas的API文档中,我们看到这样一个方法:drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint) 这个Matrix可是有大文章的,前面我们在学Paint的API中的ColorFilter中曾讲过ColorMatrix 颜色矩阵,一个4…...

基于Ubuntu 22.04 编译chip-tool工具
前言 编译过程有点曲折,做下记录,过程中,有参考别人写的博客,也看github 官方介绍,终于跑通了~ 环境说明: 首先需要稳定的梯子,可以访问“外网”ubuntu 环境,最终成功实验在Ubunt…...

opencv-17 脸部打码及解码
使用掩模和按位运算方式实现的对脸部打码、解码实例 代码如下: import cv2 import numpy as np #读取原始载体图像 lenacv2.imread("lena.png",0) #读取原始载体图像的 shape 值 r,clena.shape masknp.zeros((r,c),dtypenp.uint8) mask[220:400,250:350…...
JVM分享
JVM分享 官网:https://docs.oracle.com/javase/specs/jvms/se8/html/index.html Java代码的执行流程 我们编写完之后的java文件如果要运行,java文件会编译成class文件,在jvm中运行时ClassLoader会加载class文件,加载进来之后&a…...

Apache Dubbo CVE-2021-36162 挖掘过程
01 漏洞背景 发现该漏洞的起因是在分析 CVE-2021-30181 的脚本注入补丁的时候,意外发现了几个已被修复的 yaml 反序列化漏洞,还以为是未公开的Nday,查询后发现其实对应的是 CVE-2021-30180 漏洞的修复代码。通过查看补丁可以知道,…...
开源框架面试题目整理
目录 SpringIOC SpringAOP Spring的生命周期 Spring Bean作用域 Spring Bean作用域并发安全 Spring循环依赖...

Mr. Cappuccino的第52杯咖啡——Mybatis环境搭建与使用
Mybatis环境搭建与使用 Mybatis介绍Mybatis环境搭建与使用基于XML方式-原生方式开发创建数据库表项目准备项目结构项目代码实体类中添加有参构造方法产生的问题 基于XML方式-mapper代理开发项目准备项目结构项目代码SQL映射文件中namespace未设置为接口全限定名产生的问题 基于…...

了解Unity编辑器之组件篇Tilemap(五)
Tilemap:用于创建和编辑2D网格地图的工具。Tilemap的主要作用是简化2D游戏中地图的创建、编辑和渲染过程。以下是一些Tilemap的主要用途: 2D地图绘制:Tilemap提供了一个可视化的编辑器界面,可以快速绘制2D地图,例如迷…...
Linux字符设备操作函数
Linux字符设备操作函数是指对字符设备进行打开、关闭、读取、写入、控制等基本操作的函数,它们通过字符设备结构体中的 file_operations 结构体来定义。常用的字符设备操作函数包括: 1、open: 当一个进程试图打开设备文件时,调用这个函数。开…...

吉林大学计算机软件考研经验贴
文章目录 简介政治英语数学专业课 简介 本人23考研,一战上岸吉林大学软件工程专硕,政治72分,英一71分,数二144分,专业课967综合146分,总分433分,上图: 如果学弟学妹需要专业课资料…...
2023-07-26力扣每日一题-区间翻转线段树
链接: 2569. 更新数组后处理求和查询 题意: 给两个等长数组nums1和nums2,三个操作: 操作1:将nums1的[l,r]翻转(0变1,1变0) 操作2:将nums2[any]变成nums2[any]nums1[any]*p&…...
Java设计模式之 -- 桥接模式
什么是桥接模式 桥接模式是一种结构型设计模式,也被称为“Handle/Body”。这种设计模式主要用于将抽象部分与它的实现部分分离,使它们可以独立地变化。这种方式有助于减少系统中的耦合性,增加了扩展性。 主要解决什么问题 桥接模式主要解决…...
【node.js】02-path模块
目录 1. path.join() 2. path.basename() 3. path.extname() 1. path.join() 使用 path.join() 方法,可以把多个路径片段拼接为完整的路径字符串,语法格式如下: path.join([...paths]) 例子: const path require(path)co…...

攻防世界-Reverse-re1
题目描述:菜鸡开始学习逆向工程,首先是最简单的题目 下载附件,执行程序,如下界面 1. 思路分析 没啥说的,既然题目都说是一道简单的逆向题,那么直接使用ida逆向即可,看逆向出的结果是否能写入到…...
AES加密的基本常识和封装类
AES加密的基本常识和封装类 AES(Advanced Encryption Standard)是一种对称密钥加密算法,被广泛用于保护敏感数据的安全性。它是一种块加密算法,意味着它将明文数据分成固定大小的块,并使用相同的密钥对每个块进行独立…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...