
现在 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 后再去编译
1 blless 2022 年 7 月 4 日 https://github.com/andeya/gust 在 github 上看到有个库。。 |
2 yazinnnn 2022 年 7 月 4 日 这难道不叫 haskell style? |
3 Leviathann 2022 年 7 月 4 日 @yazinnnn 应该是 ADT |
4 GuuJiang 2022 年 7 月 4 日 其实完全没有可比性,因为不管 haskell 的 Maybe 和 Either 也好,rust 的 Option 和 Result 也好,都是一种和类型(sum type),而 go 里不管是原生的(result, err)也好,还是你这个例子里的 Optional 和 Result 也好,都是一种积类型(product type),二者是完全不同的两个东西,说句可能会引战的话,go 的 error handling 就是个没有理解和类型与积类型的区别,抄作业只抄了一半的结果 |
5 luob 2022 年 7 月 4 日 没有模式匹配是万恶之源 |
6 hxtheone 2022 年 7 月 4 日 via iPhone 没有 pattern match 莫得灵魂呀 |
7 rrfeng 2022 年 7 月 4 日 应该是这样吧? type Result interface { T|error } |
8 novolunt 2022 年 7 月 4 日 rust 不是号称用来惩罚程序员的吗 |
9 yazinnnn 2022 年 7 月 4 日 别抄 result 了, 抄 either 吧,不然 err 连类型都没办法确定 https://hackage.haskell.org/package/base-4.16.1.0/docs/Data-Either.html either 偏向右值是正确值, 毕竟 right is right |
10 chenzhekl 2022 年 7 月 4 日 这样写很浪费内存,本来 Go 就很吃内存了。 |
11 pastor 2022 年 7 月 4 日 用 go 却不用 go style ,你们真是够够的了 |
12 DonkeyBenjamin 2022 年 7 月 4 日 别人 rust 能这么玩,有 exhaustive pattern matching, if let, combinator, thiserror, anyhow, ... 你 go 有啥对应的 |
13 jorneyr 2022 年 7 月 4 日 泛型、切片、数组? 傻傻分不清。 |
14 Leviathann 2022 年 7 月 4 日 @GuuJiang 根据 rob pike 的博客来看,基本上可以确定就是一次重新发明了个三角形轮子的行为 |
16 Wanex 2022 年 7 月 4 日 那为什么不直接用 rust 还要用 go 呢 |