Golang Go语言语法感觉好诡异

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

昨天学习了下 go 语言,一开始画风还挺正常的,直到我看到数组和 MAP,感觉语法好绕人

具体见 https://tour.golang.org/moretypes/22

感觉 go 语言比 Python 绕脑子多了啊

个人用过 C 和 PYTHON


Golang Go语言语法感觉好诡异
81 回复

用过 c 的人。。。会觉得 golang 绕吗。。。

更多关于Golang Go语言语法感觉好诡异的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


关键我还用过 Python

声明的时候类型放后面就挺诡异的…

习惯就好,Scala 也这样

map[int]map[int]*Node
还行。。。

swift 也这样

心里默念:make m a Map of int to string。写出来是m := make(map[int]string),不知道有啥绕的

你就当 C 处理嘛~

其实写多了,就觉得还是 Python 爽。

python<br>" ".join([item[::-1] for item in s.split(' ')])<br>

像这种一句话写完的 Python 代码,用 go。。。

静态类型比动态类型绕,这不是很正常吗,与 Python 比明显不合适。另外,go 也不是典型的面向对象语言,如果硬要把面向对象那套思维往 go 上套,也会感觉怪异。

上面 python 是倒着来的。人家面向对象的看着就鄙视俺们。

Swift 才不是这样,差别大了。

golang 就是这个样子,带网络库的 C,写起来比较蛋疼。

其实我不是很懂:一门设计成 better C 的语言为什么经常被和 Python 和 JavaScript 比较,而且还经常有人推荐前端去学 Go😷

这两天也在看 go。
我觉得定义 struct 时,前面的 type 真心多余啊。还有成员方法的定义方式, 也是蛋疼。

Golang 的优点是语言特性少,可以在很短时间内学完全部语言特性,看别人写的代码非常清晰易懂,运行效率高,编译速度极快,协程非常易用好用。

这些才是 golang 最优先考虑的东西,为了优先实现这些特点,golang 现在的语法已经设计得非常好了。

map 和 slice 之所以是现在这个样子,正是因为受到上述特点的限制。你无法一方面要求得到 golang 的全部主要优点,又同时得到 python 的优点,如果你能做到,你就超越的当今世上最顶尖的那一批语言专家了。

黑 go 的姿势不对,要黑得黑泛型

我觉得你说的优势完全可以用 C 加一个好用的库搞定了!说实在的,我怎么觉得 C 语言语法都比 go 好理解

我是觉得 go 语法丑,,比如定义 method 的时候,,接收器、参数、返回值三个括号,挺丑

你是说的原生 C 的易学易用、编译速度、协程的易用好用程度比 go 好?????(此处省略一万个问好)
至于用 C 写些库或者啥的能不能最终实现类似 golang 的各种特性,当然可以啊,但结果只是重新发明 golang 而已。

我觉得 C 要好理解,Go 的类型后置跟英语里用从句跟在后面补充描述一样
C: This is an unsigned variable.
Go: This is a variable which is unsigned.

C 连 gc 都没有,而且 C 是目前主流编程语言中罕见的弱类型,也就是说连完整类型系统都没有,高手可以用好 C,但说 C 易学易用是不是夸张了,golang 你看别人写的代码,比 python 还要清晰易懂,C 能达到这个效果?

其实 C 的语法更绕,不信你定义一个函数指针数组试试

类型后置的其中一个目的是为了使指针声明更清晰,类型前置一旦和指针结合使用看起来更绕。

我上面说得够清楚了! C 语法更好理解,效率更高,配合网络方面的库 开发高性能的代码只会比 go 更快!我想用 go 不就是图语法更易用么?性能差点也能接受,Python 这么流行和他语法设计优雅有很大关系,Python 语法才是正常人思考方式,go 不是

可以先用用 rust~~再回头看 go

等有一天,楼主需要写库造轮子的时候,就会知道 go 的好了。。。。
用 Python 没有类型的痛啊。。。。

C 的核心语法规则比 go 容易学多了! go 的规则比 C 还多,我才看到 map 就已经记不住了

Python 从语法优雅性上确实比 go 要好很多,但是毕竟 go 并非动态语言,还是比较看重性能的,所以语法上的设计也是不得已。
有时候自己写一些小东西还是 Python 用的顺手,但是真正做一些大一些的东西 Python 就有点力不从心了。用 C 又太繁琐,特别是如果没有现成的东西给你用的时候。Go 正是适应这种场景。

这么多语言,造的轮子还不够么? java 和 Python 的库不比 go 更丰富?为何 C 语言这么多年还能经久不衰?

go 的语法够简单了

学习 c 到 golang 我觉得很简单 三天基本上就可以上手写代码

说句不好听的,学一个语言的时候,如果你是真的想学,就要抛弃你以前有的那些语言习惯,尽最大努力去接受一门新语言的设定。但是以你目前的状态,抱着 C 的语言特性不放,处处和 Go 比较,能学好我是不相信的。

类型放在后面挺好的,用过 pascal 不会觉得难受。
再看看类 C 语言把类型写在前面的,定义一个函数指针就知道有多蛋疼。

C 经久不衰有它独特的原因,操作系统用啥写你我都知道。Java Python 在系统级上的能力基本为 0,你不用 C 你用什么?

LZ 要是有结论那发个帖干嘛?人家和你讨论你又撒泼打诨,golang 好不好,全球这么多开发者、这么多项目已经证明了。你主观喜不喜欢那是你自己的事,用得着发个帖找存在感?

一门设计成 better C 的语言把 Java 干趴下了,哈哈哈哈😄

#12 目标是 better C++
不是 C

Ken 老爷子自己发明了 C,Go 相当于重新来过,然后成了 better C。

go 就是输在了语法、错误处理 和 垃圾回收上,别的都很完美了。

可以理解为,go 为了保持高性能,牺牲了语法上的便利。

之前用 go 写网络服务,真心觉得不值得,网络服务几乎全是操作 Json,用 go 写起来累死,换 nodejs 开发快很多倍。

go 还是用来折腾文件系统算了,和网络有关的,基本都是数据库添删改查,折腾 json,go 就没优势了。

看到你说学习 go 的原因了 “想用 go 就是图语法更易用”,不知道你从哪里看来得误会,go 的语法从来不是主要卖点,大多数言论对 go 的语法评价都是毁誉参半。

如果目的是语法,建议学 Kotlin,这才是以语法为主要卖点的语言,而且得益于强大的 java 虚拟机,性能不能说差,至少比 python 好,还能利用 java 的生态,生态方面比 go 和 C 都好,貌似更符合你的要求。

Golang 的类型声明完全不是问题,说 C 简单的请看 void (*signal(int sig, void (*func)(int)))(int),这个函数到底是接收什么参数返回什么什么呢?

好吧!这里我还是要感谢各位朋友热情指点,我大致了解了 go 的优缺点,虽然我已经操起了 pycharm

哈哈,上面有人说:“ golang 你看别人写的代码,比 python 还要清晰易懂”
这是真的么。。

c 基本是底层语言了吧 怎么替代他。。

你如果搞过 C,我觉得 GO 应该是你喜欢的东西吧?也许只是没有实际项目上手而已,写起来是很痛快的。

Go 语法还好吧,习惯就好,不过写的代码方法名首字母大小写混合起来用,逼死强迫症。。
但起码 Go 写起来比 C 爽

我是不会懂 make(map[int]string) 还觉得方便的人的思维的
为什么总喜欢自行一套,不支持泛型,对 array,map 开个后们也行啊,map<int,string>() 不好吗,又没有学习成本。

都是 AOT 的,谁也差不多。你需要自己提供 benchmark。

如果你永远想着躺在别人的轮子上工作,你是创造不出新的东西的。比如我现在工作中,很多东西是没有轮子可以用的,我们是在自己造轮子。
人各有志,如果你只是想一辈子当一个普通程序猿,调用调用别人的 API,当个 API 搬运工,那欢迎使用 Python。
或者如果你是精通系统底层大牛,追求极致性能或者喜欢自己动手管理内存等,那欢迎使用 C。
每个语言有其设计出来的目的和取舍,没有东西是十全十美的,就像 C/C++,Python,Java 都有其各自的优劣,Go 也是如此。
语言之争是没意义的,说到底,语言只是工具,关键就在于你能不能扬长避短,对于你的业务选择合适的语言。
比如你既然觉得 Python 好,为什么不用 Python 写系统?你既然觉得 C 好,为什么不用 C 写你的所有项目?

#13
因为 google 装逼效应嘛
就差让家里老太太扔了微信翻墙用 telegram 了

当初写 C# 转 Objective-C 的时候也是感觉很诡异。几个月后才适应

确实诡异,将数据放到管道的写法是 channel <- data, 从管道读一个值给变量还要加等号 data = <-channel

用过 oc 的表示 go 好亲切

我一开始也这样,过了一两年就习惯了。

PS. 我现在觉得 Java 语法 + golang runtime 用起来会比较舒服。

难道不是很形象吗?

kotlin 也这样。。。习惯就好

Bad programmers worry about the code. Good programmers worry about data structures and their relationships.
– Torvalds, Linus (2006-06-27).

我觉得直接 data <- channel 就行了。可能赋值有 = 与 := 两种,所以变成 data = <- channel 这样两个运算符写在一起很奇怪

仅仅就楼里提的比较多的变量名来说,rust 的冒号显然可读性提高了不少,go 要靠用户自己去分词

javaer 表示还好 能接受

scala 倒是放弃了

item[::-1],这里两个冒号没看懂。。。为什么 str 直接就变成倒序了?

Python 一点也不绕
C 就是坑多一些,容易犯错,也没有什么特别的地方

要是比绕,还是得跟 Scala 比

你要真觉得语言之争没意义,就不需要用搬运工来比喻应用开发,用大牛来比喻系统底层开发——大家都是程序员,搞鄙视链毫无意义

如果采用你的方案,当看到 a <- b 时,有三种可能性!即:1.传消息进 a,2.从 b 传消息出来并赋值给 a,3.从 b 直接传消息进 a

而原方案只有一种可能,明显更简洁、清晰、系统复杂度低、人脑负担轻。

我的本意不是鄙视业务开发,应用开发未必就不是造轮子,毕竟各自的业务还是不同的,业务总不能也调 API 吧。。。。另外,我说的大牛,也未必是真正的大牛。我说这些的原因是因为楼主一直在强调,C 也有库可以用,java 和 python 库比 go 多 blabla。
可能是我表达失误,在此道歉。

另外,在 Python 里面,list 列表(就是你说的那玩意 item[::-1])的 中括号里面分为三个部分,分别是 [起始 index : 结束 index+1 : 步长],如果不写 起始 index 就默认是从第一个元素,如果不写 结束 index+1 就默认是到最后一个元素,那么如果说步长是 -1 就变成了倒序了,因为成了从最后一个元素到第一个元素。

哈哈你这不就是 C# 吗

还好吧,只是觉得 interface{} 写起来会很蛋疼,所以偶一般会定义个 any 类型:

type any interface{}

#4 swift 好像也这样吧

塞进来爽 取出来就傻逼了 要搞一大堆的类型断言

Go 的作者虽然都老牛逼了,但一看语法规范,我就知道这帮家伙,肯定都是强迫症重度患者加控制狂,尼玛的
ps:scala 语法我觉得蛮好的,写多了 scala 代码,真的不愿意写 c++代码,就是代码的可读性差,不停的点下去,几个月不看代码,自己也懵逼

切片有第三个参数, 为步长, -1 的时候就是逆序 1 的步长. 也就是整个逆序了.

我觉得最难以接受的几点在于:
1. 类和函数都是大写字母开头,这样就挺难分清楚的了
2. 那个叫啥来着,用反引号 ` 做 json validation format。 这个感觉挺反人类的。

就是因为用 c/c++才会觉得 golang 很绕

我倒是觉得 go 的错误处理是个坑,if err != nil 真是满满登登啊



好操作,一下美观了不少!!


建议 Go 开发组直接将此加入标准库



深表赞同,,要是能把大小写区分 public 改成是否首字母下划线区分 public 就好了



明白了,原来这就是切片啊,我一直以为切片只有两个参数


type Any = interface{}

刚开始我还觉得 a := 1 这种东西还很绕的 还有_ 表示忽略返回值,后来就习惯了

关于Golang(Go语言)语法感觉诡异这一观点,其实很多初学者在初次接触Go语言时都会有类似的感受。这主要是因为Go语言在设计上有很多独特之处,与其他常见的编程语言(如C++、Java、Python等)存在较大差异。

首先,Go语言的简洁性是其设计的一大特点。它摒弃了很多传统语言中的复杂特性,如多重继承、复杂的类型系统、运算符重载等,这使得Go语言代码更加清晰、易读。然而,这种简洁性也可能让习惯了复杂语法的开发者感到不适应。

其次,Go语言在并发编程方面有着出色的表现。它提供了goroutine和channel等原生并发特性,使得编写高效的并发程序变得相对简单。但这种并发模型与传统的线程模型存在较大差异,因此初学者可能需要一些时间来适应。

此外,Go语言还注重代码的规范性和工具链的完善性。它提供了一套严格的编码规范,并通过强大的工具链(如go fmt、go vet、go test等)来帮助开发者编写高质量的代码。这些特性虽然有助于提升代码质量,但也可能让初学者感到有些繁琐。

总的来说,Go语言的语法设计有其独特之处,需要一定的时间来适应和理解。建议初学者多阅读官方文档和教程,通过实践来加深对Go语言的理解。同时,也可以多参与社区讨论和交流,与其他开发者分享学习心得和经验。

回到顶部