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

简介: Rust vs Go:常用语法对比(十)(1)

182. Quine program

Output the source of the program.

输出程序的源代码

package main
import "fmt"
func main() {
  fmt.Printf("%s%c%s%c\n", s, 0x60, s, 0x60)
}
var s = `package main
import "fmt"
func main() {
  fmt.Printf("%s%c%s%c\n", s, 0x60, s, 0x60)
}
var s = `

输出:

package main
import "fmt"
func main() {
  fmt.Printf("%s%c%s%c\n", s, 0x60, s, 0x60)
}
var s = `package main
import "fmt"
func main() {
  fmt.Printf("%s%c%s%c\n", s, 0x60, s, 0x60)
}
var s = `

另一种写法:

//go:embed 入门

Quine 是一种可以输出自身源码的程序。利用 go:embed 我们可以轻松实现 quine 程序:

package main
import (
    _ "embed"
    "fmt"
)
//go:embed quine.go
var src string
func main() {
    fmt.Print(src)
}
fn main() {
    let x = "fn main() {\n    let x = ";
    let y = "print!(\"{}{:?};\n    let y = {:?};\n    {}\", x, x, y, y)\n}\n";
    print!("{}{:?};
    let y = {:?};
    {}", x, x, y, y)
}

输出:

fn main() {
    let x = "fn main() {\n    let x = ";
    let y = "print!(\"{}{:?};\n    let y = {:?};\n    {}\", x, x, y, y)\n}\n";
    print!("{}{:?};
    let y = {:?};
    {}", x, x, y, y)
}

or

fn main(){print!("{},{0:?})}}","fn main(){print!(\"{},{0:?})}}\"")}

输出:

fn main(){print!("{},{0:?})}}","fn main(){print!(\"{},{0:?})}}\"")}


184. Tomorrow

Assign to variable t a string representing the day, month and year of the day after the current date.

明天的日期

import "time"
t := time.Now().Add(24 * time.Hour).Format("2006-01-02")
fn main() {
    let t = chrono::Utc::now().date().succ().to_string();
    println!("{}", t);
}

185. Execute function in 30 seconds

Schedule the execution of f(42) in 30 seconds.

30秒内执行功能

import "time"
timer := time.AfterFunc(
  30*time.Second,
  func() {
    f(42)
  })

or

package main
import (
  "fmt"
  "time"
)
func main() {
  fmt.Println("Scheduling f(42)")
  go func() {
    time.Sleep(3 * time.Second)
    f(42)
  }()
  // Poor man's waiting of completion of f.
  // Don't do this in prod, use proper synchronization instead.
  time.Sleep(4 * time.Second)
}
func f(i int) {
  fmt.Println("Received", i)
}
use std::time::Duration;
use std::thread::sleep;
sleep(Duration::new(30, 0));
f(42);

186. Exit program cleanly

Exit a program cleanly indicating no error to OS

干净地退出程序

package main
import (
  "fmt"
  "os"
)
func main() {
  fmt.Println("A")
  os.Exit(0)
  fmt.Println("B")
}

or

package main
import (
  "fmt"
  "os"
)
func main() {
  process1()
  process2()
  process3()
}
func process1() {
  fmt.Println("process 1")
}
func process2() {
  fmt.Println("process 2")
  defer fmt.Println("A")
  defer os.Exit(0)
  defer fmt.Println("B")
  fmt.Println("C")
}
func process3() {
  fmt.Println("process 3")
}
process 1
process 2
C
B
use std::process::exit;
fn main() {
    println!("A");
    exit(0);
    println!("B");
}

189. Filter and transform list

Produce a new list y containing the result of function T applied to all elements e of list x that match the predicate P.

过滤和转换列表

package main
import (
  "fmt"
)
func P(e int) bool {
  // Predicate "is even"
  return e%2 == 0
}
type Result = int
func T(e int) Result {
  // Transformation "square"
  return e * e
}
func main() {
  x := []int{4, 5, 6, 7, 8, 9, 10}
  var y []Result
  for _, e := range x {
    if P(e) {
      y = append(y, T(e))
    }
  }
  fmt.Println(y)
}
let y = x.iter()
  .filter(P)
        .map(T)
  .collect::<Vec<_>>();

190. Call an external C function

Declare an external C function with the prototype

void foo(double *a, int n);

and call it, passing an array (or a list) of size 10 to a and 10 to n.

Use only standard features of your language.

调用外部C函数

// void foo(double *a, int n);
// double a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
import "C"
C.foo(C.a, 10)
extern "C" {
    /// # Safety
    ///
    /// `a` must point to an array of at least size 10
    fn foo(a: *mut libc::c_double, n: libc::c_int);
}
let mut a = [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0];
let n = 10;
unsafe {
    foo(a.as_mut_ptr(), n);
}
目录
相关文章
|
2月前
|
Rust API
【Rust学习】09_方法语法
结构体让你可以创建出在你的领域中有意义的自定义类型。通过结构体,我们可以将相关联的数据片段联系起来并命名它们,这样可以使得代码更加清晰。在 impl 块中,你可以定义与你的类型相关联的函数,而方法是一种相关联的函数,允许您指定结构体的实例具有的行为。 但是结构体并不是创建自定义类型的唯一方式:让我们转向 Rust 的 enum 功能,将另一个工具添加到你的工具箱中。
20 0
|
3月前
|
Java 编译器 Go
Go to Learn Go之基础语法
Go to Learn Go之基础语法
23 0
|
4月前
|
Rust 安全 编译器
30天拿下Rust之语法大全
Rust是一种系统级编程语言,以其独特的所有权系统和内存安全性受到开发者青睐。本文从基本数据类型入手,介绍了标量类型如整数、浮点数、布尔值及字符,复合类型如元组、数组和结构体等。此外,还探讨了变量与常量的声明与使用,条件判断与循环语句的语法,以及函数定义与调用的方法。文章通过示例代码展示了如何使用Rust编写简洁高效的程序,并简要介绍了注释与宏的概念,为读者快速掌握这门语言提供了实用指南。欲获取最新文章或交流技术问题,请关注微信公众号“希望睿智”。
58 1
|
3月前
|
Rust Linux Go
Rust/Go语言学习
Rust/Go语言学习
|
6月前
|
存储 Java Go
|
5月前
|
Rust
Rust 中使用 :: 这种语法的几种情况
Rust 中使用 :: 这种语法的几种情况
|
6月前
|
Rust
Rust的if let语法:更简洁的模式匹配
Rust的if let语法:更简洁的模式匹配
|
6月前
|
编译器 Go 开发者
|
6月前
|
Go
go基础语法结束篇 ——函数与方法
go基础语法结束篇 ——函数与方法
|
6月前
|
编译器 Go 数据安全/隐私保护
go语言入门之路——基础语法
go语言入门之路——基础语法
下一篇
DataWorks