Java转Go

更新日记

  • 2019-02-15 20:07
    • 用Go快3个月了,最近要重新转回Java了,不是因为Go,而是因为方向,这里总结一下两者吧(个人)
      • 喜欢的地方:

        • 多返回值,这点真的很棒
        • 遍地函数式编程,very good
        • type 起别名(c++),别名又可以重新绑定方法,omg its really good
        • 遍地协程,遍地协程,遍地协程!!!
        • 强大的benchMark,龟龟,真的忒强大了
        • 类型推导
        • channel不要太棒
      • 不喜欢的地方:

        • 异常处理,每次都是返回error来判断(给人一种通过字符串强匹配一样),并且recover不是很喜欢
        • 多次一举的取消;以及强制大括号上下,而不是对齐,对我这个有点轻微强迫症的很难受
        • 很难受的一点:结构体分层解耦问题,虽然Java也存在一个public中存在static静态内部类,或者就是各种内部类,但是go,个人感觉如果不通过接口来充分解耦的话,很容易产生循环依赖问题,尤其是中间参与项目的话,并且有种杂的感觉
        • 像鸭子模式:Go实现接口不是靠显示声明而是通过绑定方法来实现,由此延伸出抽象类在Go中难避免其初始化,虽然某个Java创始人认为抽象类是最糟糕的设计(赞同),但是对于喜欢写设计模式的我而言,emmmm 难受(抽象类基本必不可少,虽然可以抽为接口代替)
        • 轮子太少,不过也因为轮子太少,对底层的一些数据结构倒是挺清楚了
        • 包的依赖管理,呵呵,maven只需要改个版本号,然后clean install即可,go emmmm

2018-10-30 昨天看了一天的Go,今天记录一下吧
使用Go当然需要用到Go的命令和Go的工具,而这些离不开Go的配置
GOROOT:
就是Go的安装路径
GOPATH:
是编译后的存放的位置和import时搜索路径,同时这个也可以当做Java 中的workerspace
主要存放的三个目录:
bin:存放可执行目录
pkg:存放编译好的库文件
src:存放源文件

2018-11-12
10:46:更
Go中指针与地址是有时候会遗漏啊,可能跟敲的代码不是非常多有关吧,Java敲的很多了,基本都是引用传递,Go 传slice 的时候记得要用& ,就算内部成员都是*,但是当call func的时候内部还是没改变的,谨记
2018-11-10
14:27
Go中一些相关是通过//实现的(与注释同一个级别) 如//Decreted 代表 过期 在Java则是通过@Decrepted 表示,Go有点奇怪啊… ,竟然是用注释来实现的
14:53
代码洁癖者,重复的CRUD简直遭罪,Go中实现抽象类与Java差距好大,Go中实现抽象类主要还是通过内部再定义一个此类型的变量,而对于abstract 方法则是通过这个变量来调用的,从而实现延迟调用(感觉有点不优雅)
Java :

public Interface A {void say();} 
public abstract class AbsB implements A {proteced abstract void childCall();}
public class C extends AbsB{//实现具体的方法}

Go:

type A interface{ say()}
type AbsB struct { //绑定方法,从而达到接口实现的功能
	absB AbsB
	func (ab *AbsB)say(){} 
	func ChidCall(){absB.ChildCall()} //这一步达到让延迟加载的作用
}
type C struct{
	AbsB  //达到继承功能
	func .. ... 然后重写ChildCall方法,达到抽象实现功能
}

2018-11-13
 16:41:
Go的web开发模式好像不是mvc模式啊,看了好几个demo,c与servie好几个都是绑定着的…
go build 构建,会生成可执行文件 ,然后直接./ 即可
go run 直接执行 XXX.go 即可
go install 命令会将编译后的文件和库文件安装到指定的目录下 (并且可执行文件与其所在目录同名,可执行文件被放置在src同级的bin目录下,同时编译后将依赖的package包编译后放在src同级的pkg目录下)
还是单独记录了,每次都要更新太麻烦

你可能感兴趣的:(Go)