Golang Go语言中 初学常遇:网友称某某Go代码一股Java味
Golang Go语言中 初学常遇:网友称某某Go代码一股Java味
小白想问问:
- 为什么说他一股 java 味
- 什么样的 go 代码是优雅的、好的
啥是 Java 味?
更多关于Golang Go语言中 初学常遇:网友称某某Go代码一股Java味的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
借宝地一问,上次看到一人说 Go 是云计算的 PHP,略感迷惑,求解
Java 味咋了?
什么是好的?只有原则,没有标准,最基本的,按照 go 的代码规范,命名风格来开发。
我也没太明白,我是 Java,.net core 开发,初学 go,现在甚至连 go demo 都写不出来
Java 是咖啡味
典型的 Java 味: 所有的类(类型)全部由一对 IXXX 和 XXXImpl 组成
https://golang.org/doc/effective_go.html
https://github.com/uber-go/guide/blob/master/style.md
go 风格的看这些差不多了
Java 味我感觉就是过度封装,没高阶函数导致滥用设计模式
给 golang 倒杯卡布奇诺
别写 Factory, Impl, Service, Repository etc. hehe
golang 这种基本上几乎完全没有 oo 特性的语言,除了文件命名,怎么可能写出 java 味来?
这个网友怕根本不会 java 吧?就随便听说个名词就来了?
go 更像 c,但是相对比 c 简单。开发成本上更接近 PHP,但是性能比 PHP 好很多。目前 go 还是吹的多,生态感觉还是很一般的。
好的大佬,看完语法我就看看这些
接口?链式调用?
没觉得 go 优雅,我觉得说它优雅,是比 C++优雅~
个人觉得 Ruby 语法能算得上优雅,而且,许多其它编程语言这几年的演进,都多少有点学 Ruby 语法的意思。但是 Ruby 写出来的代码又太灵活多样。代码成品+语法整体上,还是不够优雅。
希望有真正优雅的编程语言出现~
使用多种编程语言的人,通常都会融合从各个语言里学到的好的编程思想,所以看起来“味”就不那么“纯”?
说他是 php,是说他有些设计真的很恶心,但是火的快呀
我见过 Java 味儿的 PHP,每个 class 都要带个 interface,class 里的每个属性都要手写 getter 和 setter,再加上一个自己仿的 Hibernate
说是 Java 味, 不如说是被各大公司的 Java 编程规范带偏了的 Java 代码 /设计风格.
前面有人也提过, 比如:
1. 各种过度设计. (各种 Impl, 各种 Factory, 各种 Manager)
2. 函数 /变量名字超长
3. 调用栈超级深, 很多没用的封装
4. 还有别的补充吗?
不吹,谁去建设生态
比如下面?<br>func (this *Model) Foo() {<br> <a target="_blank" href="http://this.Name" rel="nofollow noopener">this.Name</a> .....<br> ....<br>}<br>
什么是 java 味?
是
- 所有文件都有 impl 命名实现与对应的 interface
- 用 dao 命名数据库操作
吗?
接口和实现类也算 过渡设计 吗?
java 味最恶心的地方是各种注解,你不学一遍这个框架都不知道是啥意思
gopher 大军和 javaer 大军要开始了
java 算个屁,我 GO 语言天下第一
当一小撮人不搞无聊的价值观和立场对立的时候
就是国内计算机真的崛起的时候
人家说的是 [某某 go 代码] ,可能某某用 go 模拟写 java 吧。
何必在意这些鸡毛蒜皮的事呢
有时候就是写个项目中用的小工具,不套那些大中型项目的设计模式 1000 行代码差不多了,但是创建的人也整个全套 interface/impl/model/dao/repo/service,多了几倍的文件和代码
如果绝大多数接口预期只有一个实现,那不是过渡设计是什么?
上来先整一个 src 文件夹用于放 go 代码,可能是 Javaer 的风格。
其实不需要的。
等我有钱了,一定要买个能闻味道的电脑
说的太对了,我今年刚看了 java 和 springboot 就这种感觉。。。
#31 额… 资源文件混在一起 大项目几十个文件夹跟项目 还有各种配置 上万个文件 混在一起不是人都傻了。
这没啥吧。src 代表源码,pkg,bin 也不也有么。。
什么时候连接口跟实现隔离的设计都成过度设计了? 各位软件工程是不是白学了…
JAVA 味道到底是什么?
只用 jdk proxy 就要接口 没啥毛病
记得有个开源项目,用 go 把 Spring 那一套实现了一遍……
javer 写啥语言都爱整 java 那一套特烦人,之前在论坛发过帖子说 php 整 java 那套的,一堆人怼我说是正确做法,维护性高。
当初学 go 的时候,说的是云计算的 c
不是一个东西,go 的 src 是 gopath 时代用来存放所有 golang 的源码库的文件夹,和 src 文件夹平级的 pkg 和 bin 分别存放依赖和编译生成。一个源码库里面理论上不出现 src 文件夹,直接以 package 的形式区分。
主要写 java 也写过 go,真想学一下咋把 go 写出 java 味。。
#36, 没写过测试代码都这样,没必要跟他们急
写 Java 的人转 Python,写出来的 Python 代码也是一股浓浓的 Java 味。
所谓 Java 味,就是明明一两个文件就能写完的逻辑,非要嵌套十几而是层文件夹,例如,你发下有一个人写的 Go 代码是这样的:
com/xxx/yyy/zzz/mm/impl/abc.go
com/aaa/bbb/ccc/ddd/eee/fff/xyz.go
这就叫做 Java 味。
还有一种是大量使用 get/set 。当我们用 Go 初始化一个已知数据的数据的时候,一般这样写:
a := []string{“aaa”, “bbb”, “ccc”}
但是 Java 味会这样写:
var a []string
a = append(a, “aaa”)
a = append(a, “bbb”)
a = append(a, “ccc”)
Java 味不光在 Go 常见,在哪都常见,典型的就是到处糊设计模式。
设计模式是语言缺陷的体现,换了个语言很多时候就不需要某些设计模式了。比如有 multi methods 就很少需要 visitor 了,但是有的人还跑过来一个劲地写 visitor,这就是所谓的某种‘味’。
直接写 go func 就行了,非要搞个空 struct,然后把方法写到这个空 struct 下
程序能跑,能赚钱,管他什么语言,管他优雅不优雅,哪怕是中文写的函数呢
都一样,C 的 enum 也恶心
我见过一段变量名以$开头的代码,这是不是 PHP 味的?
我就喜欢看大家各种抬杠 O(∩_∩)O 哈哈~
借楼问一下,macos 没有管理员权限下安装 go lang
对 java 是异教徒 ,大家回到 1996 去干掉异教徒,发布 1996 go 。
#44 java 是这样写 String[] a = new String[]{“aaa”,“bbb”,“ccc”};万物皆对象. java 也没有切片,数据直接赋值即可.能不能找点编程语言非共通的点来黑呢.
#26 大佬是不屑于讨论这些的.你在这里看到的回复可能(应该)100%都是菜鸟(包括我)
这个是按行数算 KPI 工作绩效的吧
某些人对自己理解不了的事情或驾驭不了的技能都会扣上各种帽子,比如说 XX 味
正解
预期只有一个实现的主要原因是不写测试
优雅又不能当饭吃,你搞个私人项目随你怎么优雅
go 代码一股 PHP 4 味道,为产屎山代码创造了条件。
优雅大概是能当饭吃的,不然代码格式化和动态语言的静态检查也卖不出一年几十刀的价格。
私人代码随便怎么玩都是没有问题的,这是必须的没错。
问题是,一旦优雅的代码成了工作要求的一部分,你怎么办?写屎山代码容易,写良好设计,结构上优雅的,可维护的代码很难。
敏捷有一条是产出 Workable,而不是你在机器上 Runnable 。
如果最基本要求代码优雅,会当成笑柄,我觉得才是问题。
java 味儿,就是纯粹的面向对象,没有语法糖导致不得不写一堆又臭又长的无效代码
po 主的优雅可能与 2 位的不一致。也有可能是我理解有问题。我感觉他就是再说语法糖
优雅的代码当然可以当饭,必须遇到懂的人。就如结婚件事,在农村结婚,80%的人只是搭伙过日子。喜欢混日子的人,只是觉清理代码浪费了时间。
对于现代软件工程,代码质量检测已经是 CI 和 CD 的一个环节(步骤),包括动态和静态检测,现在有些云工具支持 AI 检测,不仅是一些规则,语法之类,一些啰嗦或者有安全问题,性能问题的代码一样会检测出来。很难想像现在还有人喷这些东西。
在 php 里看见 getter setter 这下我真受不了
那可能你遇到的人比较资深。我看到的 Java 工程师都是先创建一个空对象,然后一个一个赋值,可能是我举得例子不好。他们主要是操作 Hash 的时候会这样做。不是数组。
可能是因为类似于下面的代码写少了:
if err != nil {
…
}
鄙视链又来了 好起来了
我见过 Golang 这样写的
if “” == varA {
}
所谓“Java 味”实际上就是类似所有 Object 型编程语言的意思
经常有人吐槽 go 的语法难看。。。
要说"味道"的话,其实 go 的 C 语言味和 python 味比较浓,但你要说 java 味的话…那不是语言有 java 味,是人有 java 味。
楼上很多人理解错了呀
这句化的意思是说有人写 golang 写的一股 java 的代码风格和味道
就好比你写 python 却用 java 那套思想,就不够 pythonic
马上都 1202 年了,上个 jdk11 用个 Map.of()不过分吧,就算是 8 也有 ImmutableMap.of()啊?你真确定这是语言的问题,不是人的问题?同样的 arr,不就 List.of().toArray()的事儿?
显然是人的问题。优秀的人切换语言以后,会用新语言的开发方式和风格。平庸的人会继续保留老代码的风格,不愿意学习新的东西。
即便是 java 自己,这几年的风格也是比较激进的,很多语法糖有了,很多以前泛滥的 dp 也不需要了,fp 也有了(虽然相对残废),reactive 也有了,无非是懒不懒愿不愿意学的问题。再出一个 lts 之后,如果 loom 和 vahalla 都进了,那就更不一样了。
好多人就是懒加不思考。就比如上面吐槽的 setter 泛滥和 map 一通 put 的问题,不客气一点就是彩笔,什么是 immutable 的什么是 stateful 的分不清,连最基本的封装思想都没有。这锅根本不该 java 背。
懒人用什么语言写出来都烂,无非是语言本身的门槛不一样。让懒人上 rust 怕是连编译都搞不定。
PHP 是最好的语言!结贴
一个主要基于 Path 的语言 + 半残废的 OOP,怎么能写出 Java 味,再下想学习
java 还有味道的吗?
go 没有类,没有泛型,你却要以某种技巧模拟出这些东西来,应该就是这个意思。如果模拟 Java 的一些特色,就是 Java 味。
楼上的说的差不多了,补充一点:
在项目模块分解的时候,go 语言一般按功能分,java 一般按类型分。
例如,java 的 model 包含项目中所有的模型。golang 一般是按用户模块,交易模块这么分。
在Go语言学习过程中,遇到“某某Go代码一股Java味”这样的评价,其实并不罕见。这通常意味着代码的风格、结构或者某些编程习惯更接近于Java,而非Go语言的惯用方式。
Go语言以其简洁、明了和高效著称,强调“代码即文档”的理念。Java背景的开发者在初涉Go时,可能会不自觉地带入Java的编程思维,比如过度使用面向对象编程(OOP)特性、复杂的类层次结构、过多的抽象和接口等,这些都与Go语言的简洁主义相悖。
为了写出更具Go语言风格的代码,建议初学者注意以下几点:
- 利用Go的简洁性:尽量使用简单的函数和结构体,避免不必要的类和接口。
- 并发编程:Go的goroutines和channels是其并发编程的亮点,应充分利用这些特性,而非依赖传统的线程和锁。
- 错误处理:Go的错误处理机制与Java不同,更强调显式返回错误值,而不是异常捕获。
- 代码格式:遵循Go的官方代码格式规范(如gofmt工具),保持代码整洁一致。
总之,写出地道的Go代码需要时间和实践。通过不断学习和实践Go语言的编程范式,初学者可以逐渐摆脱Java思维的影响,写出更加符合Go语言风格的代码。