java与golang语法比较(一)

Wesley13
• 阅读 638

变量声明与赋值

  • Java

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

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

异常处理

  • 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()) }

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
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
晴空闲云 晴空闲云
2年前
javascript实践教程-03-变量
本节目标1.掌握声明变量的方式。2.掌握var和let的区别。内容摘要本篇讲解了变量声明的两种方式var和let,并对比var和let声明变量的差别,最后对变量名名称规则进行了总结。阅读时间1015分钟变量基础js中声明变量可以使用var和let关键词。其中var是es5的语法,let是es6的语法。var声明变量var可以用来声明局部变量和全局变
郜小超 郜小超
3年前
面试问题总结(持续更新中。。。)
1.letconstvar的区别在JavaScript中,有三个关键字可用于声明一个变量,并且每个关键字都有其不同之处。分别var,let和const。一个简单粗暴的解释:使用const关键字声明的变量不能被重新赋值,let而且var可以。也可以这么说:const只可以声明一个常量(js中一旦被定义就无法再被修改的变量,称之为常量)。eg:
Wesley13 Wesley13
2年前
Go 变量声明
变量命名命名方法varnametype是定义单一变量的语法packagemainimport"fmt"funcmain(){varageint//variabledeclarationfmt.Println("Mya
Wesley13 Wesley13
2年前
ES6 简单整理
1.变量声明let和constlet与const都是块级作用域,letfunctionname(){letage12;//age只在name()函数中存在}constconstname'tom'name'jack'//
Wesley13 Wesley13
2年前
ES 6新语法
一、块级作用域绑定回顾:使用var关键字定义变量定义  声明  赋值; 1. 可以一次定义多个变量 2. 定义时可以只声明不赋值 3. 定义之后可以随时修改变量的值 4. 变量声明会被提升 5. 可重复定义变量 6. 全局定义的变量会被作为全局对象(global/w
Wesley13 Wesley13
2年前
ES6的语法
一,定义变量let(类似var)在js一直有一个bug是var:1、var声明的变量会有变量提升console.log(name);//jhonvarname'jhon';2、var没有块级作用域varname2'jjjon';{varname2'tom';
Stella981 Stella981
2年前
JavaScript变量声明
const,let,var的区别和用法1.const——声明一个只读的常量,在声明的时候给其赋初值,之后不能再进行赋值。1consti0;2console.log(i);//有输出,为0如果对i进行再次赋值则会报错,TypeError:Assignmenttoconstantvariable
Stella981 Stella981
2年前
Javascript中的基本数据类型
Undefined在var或者let中声明了变量但没有赋值时,这个变量的值就是undefined.使用typeof关键字检测未声明变量的类型为undefined.Nullnull表示一个空对象指针,所以用typeof检测null时,会返回objectundefine派生自null,
Stella981 Stella981
2年前
JavaScript 声明全局变量的三种方式
JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍。声明方式一:使用var(关键字)变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量。声明方式二:没有使用var,直接给标识符e赋值,这样会隐式的声明了全局变量e。即使该语句是在一个function内,当该funct