Golang Go语言中试了下 go in rust style

发布于 1周前 作者 wuwangju 来自 Go语言

现在 go 其实也可以写成 rust 的这样,但是没有 match 意义不大

package main

type Optional[T any] struct { Some T IsNull bool }

func Some[T any](value T) Optional[T] { return Optional[T]{ value, false, } }

type Result[T any] struct { OK T Error error }

func OK[T any](value T) Result[T] { return Result[T]{value, nil} }

func a() Result[string] { return OK(“1”) }

func main() { var s = Some(1) if s.IsNull {

}
var b = OK(a())
if b.Error != nil {

}

}

我在想能不能借助 IDE 包装一层 go++ 以提供自定义语法糖,go++ 翻释成 .go 后再去编译


Golang Go语言中试了下 go in rust style

更多关于Golang Go语言中试了下 go in rust style的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

17 回复

https://github.com/andeya/gust 在 github 上看到有个库。。

更多关于Golang Go语言中试了下 go in rust style的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这难道不叫 haskell style?

应该是 ADT

其实完全没有可比性,因为不管 haskell 的 Maybe 和 Either 也好,rust 的 Option 和 Result 也好,都是一种和类型(sum type),而 go 里不管是原生的(result, err)也好,还是你这个例子里的 Optional 和 Result 也好,都是一种积类型(product type),二者是完全不同的两个东西,说句可能会引战的话,go 的 error handling 就是个没有理解和类型与积类型的区别,抄作业只抄了一半的结果

没有模式匹配是万恶之源

没有 pattern match 莫得灵魂呀

应该是这样吧?

type Result interface { T|error }

rust 不是号称用来惩罚程序员的吗

别抄 result 了, 抄 either 吧,不然 err 连类型都没办法确定

https://hackage.haskell.org/package/base-4.16.1.0/docs/Data-Either.html

either 偏向右值是正确值, 毕竟 right is right

这样写很浪费内存,本来 Go 就很吃内存了。

用 go 却不用 go style ,你们真是够够的了

别人 rust 能这么玩,有 exhaustive pattern matching, if let, combinator, thiserror, anyhow, … 你 go 有啥对应的

泛型、切片、数组?
傻傻分不清。

根据 rob pike 的博客来看,基本上可以确定就是一次重新发明了个三角形轮子的行为

可不是,被编译器疯狂羞辱

那为什么不直接用 rust 还要用 go 呢

在Go语言中尝试以Rust风格编写代码是一个有趣的实验,但重要的是要理解这两种语言在设计哲学和最佳实践上的根本差异。

Rust以其强大的类型系统和所有权模型而闻名,这有助于在编译时捕获许多常见的错误,如内存泄漏和悬垂指针。然而,Go语言则采用了不同的策略,它更强调简洁性和运行时效率,通过垃圾回收来管理内存,并使用静态类型检查来确保类型安全。

在Go中模仿Rust的风格可能会导致代码变得过于复杂和冗长,从而失去了Go语言本身的简洁性和可读性。例如,Rust中的许多特性,如生命周期和trait,在Go中并没有直接的等价物,因此可能需要引入额外的抽象层或设计模式来模拟这些功能。

此外,Go语言的并发模型(基于goroutines和channel)与Rust的异步/等待模型也有很大的不同。试图在Go中强制使用Rust的并发模式可能会导致性能下降和代码难以维护。

因此,虽然尝试在Go中采用Rust的风格可能是一个有趣的练习,但建议在实际项目中保持对Go语言特性的尊重和利用。这包括利用Go的简洁语法、强大的标准库和高效的并发模型来编写清晰、可维护和性能良好的代码。

总之,每种编程语言都有其独特的优势和最佳实践。在尝试将一种语言的风格应用于另一种语言时,务必谨慎并考虑其适用性和潜在影响。

回到顶部