java与golang语法比较(一)

变量声明与赋值

  • Java

    1int i; // 声明 2int j = 1; // 声明+赋值
  • Go

    1var i int // 声明 2i := 1 // 声明+赋值
  1. 变量声明:var是关键字,格式:var 变量名称 变量类型
  2. 变量声明与赋值: := 符号支持<b>自动推导类型</b>

异常处理

  • Java

    // 声明 int execute(){ throw new RuntimeException(”msg”); // 有错误 return 0; // 无错误 } // 处理 try{ int code = execute(); }catch(Exception e){ // TODO 异常情况如何处理 }

  • Go

    // 声明 func Execute() (int , error) { return 1,error.New(“msg”) // 有错误 return 0 // 无错误 } // 处理 if code,err=c.Execute();err!=nil { // TODO 异常情况如何处理 }

  1. go的异常是做为函数返回值的,通过判断是否存在error,来判断异常。 (不能够像Java一样抛出异常)
  2. go的if语句支持初始条件,即先执行if之后的语句(分号之前),再执行分号之后的判断语句,此语句经常用于异常处理。
  3. go的大括号必须在行末
  4. go函数或者变量为”公有”,首字母大写,”私有”则小写。

参数传递

  • Java

    略,见Go实现中的注释

  • Go

    package main // 入口必须是main import "fmt" // 引包

    type People struct { // 结构体,类似Java中的class         age int // 变量声明,变量类型放在后面         name string } // 类似Java方法的函数 func change(p People){ // func为关键字         p.age = 18 } // 传递指针 func change2(p *People){         p.age = 18 } func main(){         p := People{22,"lsq"} // 新建对象并赋值         change(p) // 调用函数change,传递对象         fmt.Println(p) // 控制台打印         change2(&p) // 调用函数change2,传递指针         fmt.Println(p) } // 执行结果 {22 'lsq'} {18 'lsq'}

  1. change函数是传递的对象,函数调用的时候,会拿到对象的拷贝。
  2. change2函数是传递的指针,函数调用的时候,会拿到一个指向改对象的指针。
  3. go没有引用传递

多态

此例有点长,是一个求面积的问题,针对与圆形和矩形两种类型
  • Java

    import java.lang.Math; public class Polymorphism{         public static class Rectangle implements Areable{ //矩形                 double width;                 double height;                 public Rectangle(double width,double height){
                            this.width = width;                         this.height = height;}                 public double area(){                         return width * height;}         }         public static class Circle implements Areable{ // 圆形                 double radius;                 public Circle(double radius){                         this.radius = radius;}                 public double area(){                         return radius * radius * Math.PI;} }

        public static interface Areable{
    

            double area(); } public static void main(String[] args){       Areable arear = new Rectangle(5.0,5.0);       Areable areac = new Circle(2.5);       System.out.println(arear.area());       System.out.println(areac.area()); } }

  • Go

    package main import (         "fmt"         "math" )

    type Rectangle struct { // 矩形         width float64         height float64 } type Circle struct { // 圆形         radius float64 }

    type Areable interface{ // 接口:一组method签名的组合,通过interface来定义对象的一组行为。 // 只要是实现了interface中的所有的method的结构体,就可以认为是这个interface的实例,Duck typing         area() float64 } func (r Rectangle) /* 函数的接受者Receiver / area() float64 / 返回值类型*/ {
            return r.width * r.height }

    func (c Circle) /* 函数的另一个接受者Receiver / area() float64 / 返回值类型*/{
            return c.radius * c.radius * math.Pi }

    func main(){         ra := Rectangle{5,5}         ca := Circle{2.5}         fmt.Println(ra.area())         fmt.Println(ca.area()) }

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

面试问题总结(持续更新中。。。)

1.letconstvar的区别在JavaScript中,有三个关键字可用于声明一个变量,并且每个关键字都有其不同之处。分别var,let和const。一个简单粗暴的解释:使用const关键字声明的变量不能被重新赋值,let而且var可以。也可以这么说:const只可以声明一个常量(js中一旦被定义就无法再被修改的变量,称之为常量)。eg:

javascript实践教程-03-变量

本节目标1.掌握声明变量的方式。2.掌握var和let的区别。内容摘要本篇讲解了变量声明的两种方式var和let,并对比var和let声明变量的差别,最后对变量名名称规则进行了总结。阅读时间1015分钟变量基础js中声明变量可以使用var和let关键词。其中var是es5的语法,let是es6的语法。var声明变量var可以用来声明局部变量和全局变

ES 6新语法

一、块级作用域绑定回顾:使用var关键字定义变量定义  声明  赋值; 1. 可以一次定义多个变量 2. 定义时可以只声明不赋值 3. 定义之后可以随时修改变量的值 4. 变量声明会被提升 5. 可重复定义变量 6. 全局定义的变量会被作为全局对象(global/w