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


81. Round floating point number to integer

Declare integer y and initialize it with the rounded value of floating point number x .
Ties (when the fractional part of x is exactly .5) must be rounded up (to positive infinity).

strings.Contains()源码阅读暨internal/bytealg初探

该篇内容去Go夜读做了分享,配合视频食用更佳

可能是因为头一次,也可能是准备不算绝对充分,远没有信手即拈来,更激动也忧心此后要被许多同行——包括新手和大牛,数次学习或检验从而压力山大,有些微紧张。几次口齿不清,数度大脑间歇空白,更有片段未顾及听众观感语速不自觉飞快

总之也勇敢迈出了这一步,继续加油,继续Explore。

感谢杨文大佬的组织,折腾起这样一个社区,个人要付出得太多。 自18年学习go以来便从中获益良多,也希望以后再能返馈涓埃

视频中有期期艾艾片段多多包涵,有讲解不清之处欢迎联系 交流探讨

2021.09.30补记.


16777619与FNV哈希算法

FNV哈希算法

FNV(Fowler-Noll-Vo)哈希算法是一系列设计用于快速生成散列值的非加密哈希算法。它的设计目标是在散列散列键时实现高度分散,以减少碰撞并提高哈希表的性能。FNV算法特别适合散列字符串类型的数据,例如文件名、URLs、IP地址等。

提出时间

Rust风格的Hello World

Rust 借鉴了很多语言,比如Cyclone(一种安全的C语言方言)的基于区域的内存管理模型;C++ 的RAII 原理;Haskell 的类型系统、错误处理类型、typeclasses等等。Rust 有非常小的 runtime,不需要垃圾回收,默认情况下是在栈上进行分配内存,而不是堆上。Rust 的编译器 rustc,一开始使用 Ocaml (一种函数式语言)编写,后来在2011年 Rust 实现了自举。

RUST语言的编程范式

配套视频:以 Rust 为例,带你搞懂编程语言本质

Go二进制文件在其他机器一执行就退出的问题

在编译机上把一个go项目编译成二进制,cp到服务器(和编译机不是一台机器,但操作系统和指令集架构一样)的某个目录,执行后直接退出了,没有任何报错信息。



在本地Mac上把代码clone下来,go build编译成二进制,可以正常运行。在Mac上交叉编译成linux/amd64的二进制文件,sz到测试服务器上,还是会直接退出。之后又找了一台ubuntu amd64的机器,还是一样。


但在这台ubuntu amd64机器上clone代码,进行编译,又可以正常运行…

后面发现,引入Mac使问题变复杂了…其实本身很简单: 在Ubuntu系统 amd64架构机器A上面源码编译,并可正常运行的二进制文件,sz到另一台Ubuntu系统 amd64架构的机器B上,运行后直接退出,没有任何报错


fmt.Println与println有多少区别

1.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package main

import (
"fmt"
"golang.org/x/sync/errgroup"
)

func main() {

var midList []int64

for i := 0; i < 100000000; i++ {

midList = append(midList, int64(i))
}

var g errgroup.Group

i := 0
for _, v := range midList {
mid := v
g.Go(func() error {

var err error
errG := err
fmt.Println("mid为:", mid)
if errG != nil {
return errG
}
return nil

})
i++
}

//println("i 为:", i)

}

Go死码消除

概念:


死码消除(dead code elimination, DCE) 是一种编译器优化技术, 作用是在编译阶段去掉对程序运行结果没有任何影响的代码