【go入门】之与java的main函数对比

作为一名老java,机缘巧合下开始搞K8S,那必须得会go啊。
所以就对比着java,对go进行一次突击入门。

main函数对比

习惯上,我们学习一门语言都是从hello_world开始。

先使用一个简单的程序,对比下java和go的代码风格,先有个感性认识。

java

 package com.yunsheng;
 
 import java.util.Date;
 
 public class Demo {
     public static void main(String[] args) {
         int a = 1;
         int b = 2;
         Demo demo = new Demo();
         int c = demo.sum(a, b);
         Date now = new Date();
         System.out.println(now.toString());
         System.out.println(c);
    }
 
     private int sum(int a, int b) {
         return a + b;
    }
 }
 

go

package main

import (
   "fmt"
   "time"
)

func main() {
   var a, b = 1, 2
   result, err := sum(a, b)
   if err == nil {
      fmt.Println(result)
   }
   fmt.Println(time.Now())
}

func sum(a int, b int) (int, error) {
   c := a + b
   return c, nil
}

我们从第一行开始对比

包的概念

java和go都有package这个关键字。即定义包。

在java代码中,写了package com.yunsheng;那么我的代码一定是在目录com/yunsheng下,包名和目录名必须对应。

而在go中,包名和目录名并不要求对应上,


image.png

看这个源码,包名,目录名,文件名都可以不一样。
当然强烈建议包名和目录名一致。
并且同一个目录下的go源代码文件,必须都是相同的package。

此处包名写为main,是因为go的main函数必须运行在名称为main的包里。

main函数是一个go应用的入口,通常我们将main代码包称为程序代码包或命令代码包。(在工程上,通常将main函数放在名为cmd或app的目录下)。将其他的源码包称为库代码包。

引入import

这也是go和java都有的关键字。

区别在于,java语法简单直接,引入之后,直接使用。没有什么花活。

go就要多说点了

go引入之后,在使用时需要用引入的包名来使用相应的方法,比如


 fmt.Println(time.Now())

另外,go在imort时可以给包起别名,如

 import myfmt "fmt"

然后在使用时,就可以用别名。其实这种方式才是go引入包的标准写法。

 myfmt.Println(time.Now())

这是一个非常实用的功能。因为我们经常会遇到引入的包方法同名的情况。在java里,我们需要在调用方法时使用全量包名的方式来解决。go显然提供了更优雅的解决方式。

句点引入

一种特殊的import方式

 import (
 . "fmt"
 . "time"
 )

这种方式引入的,在使用方法时可以省略包名。就好像是自己写的代码一样。

 Println(Now())

这种方式不推荐使用,因为会使代码的可读性变差。

匿名引入

import _ "fmt"

这种方式是为了加载一下包,使包中的初始化代码得到执行,进行资源初始化。

除了这种匿名引入,其他引入的包必须被使用。如果只引入而不使用,代码编译报错。这点也和java不同

class类

java的核心理念就是面向对象,所以我们的代码一般情况下都是在一个class里

go中没有明确的面向对象的说法。

go的一等公民是函数。你可以发现,go是通过包的引入来使用函数和变量等资源。

如果非要扯上对比的话,可以将go中struct比作java中的class。关于struct以后再说。

main函数

go和java的程序入口都是这个名为main的函数。

从定义上来看,显然go的语法要简洁的多。

go定义的函数没有java的public、protected、private等访问控制修饰符。go通过一种有趣的方式声明属性或方法的访问权限:

通过首字母的大小写。

大写的就是其他包可访问,小写的就只能包内访问。

所以你可以看到fmt调用的Println首字母就是大写的。

go中没有static关键字,也不支持相关的静态概念。

变量声明

go和java都是静态语言,但是go却有不少动态语言的灵活性。

go声明变量可以省略类型

比如第6行的

var a, b = 1, 2

省略了变量的类型,go会根据字面量值是数字,自动推断a,b的类型是int

写全应该是

var a, b int = 1, 2

另外,go中声明变量还有一种更简单的方式,称为短声明

a, b := 1, 2

关于短变量声明和var声明的一个区别是:

在方法内两者都可以。但是在方法外只能用var声明。

方法返回

go支持多返回值。相比较java而言,这是一个让人写代码很舒服的特性。
go中方法的返回值一般设计为(data,error)这种形式。
如果方法执行异常,通过error返回错误。
如果方法成功执行,那么使用data的数据。
所以,方法的调用者可以通过error来判断方法是否正常执行完成。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 143,048评论 1 300
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 61,330评论 1 256
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 94,541评论 0 213
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 41,042评论 0 176
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 48,821评论 1 255
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 38,795评论 1 176
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 30,413评论 2 271
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,173评论 0 167
  • 想象着我的养父在大火中拼命挣扎,窒息,最后皮肤化为焦炭。我心中就已经是抑制不住地欢快,这就叫做以其人之道,还治其人...
    爱写小说的胖达阅读 28,994评论 6 229
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 32,525评论 0 213
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,327评论 2 215
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 30,648评论 1 230
  • 白月光回国,霸总把我这个替身辞退。还一脸阴沉的警告我。[不要出现在思思面前, 不然我有一百种方法让你生不如死。]我...
    爱写小说的胖达阅读 24,248评论 0 31
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,142评论 2 214
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 31,521评论 3 204
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,622评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,025评论 0 166
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 33,543评论 2 230
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 33,636评论 2 231

推荐阅读更多精彩内容