慢聊Go之GoVSJava之微观比较(8)|Go主题月

1,289 阅读3分钟

image.png

"进阶架构师" 微信公众号,欢迎大家订阅、阅读、评论、点赞!!!!

前言

最近有点忙,没来得及更新。但是学习的脚步,不应该因任何理由去停下。所以,今天我们继续,我们会多更一下,赶上学习的进步。

之前,我们在慢聊Go之GoVSJava之微观比较(7)聊了Go与Java中关于new的概念与示例。通俗的来说,我们学会了,对象的创建。那么对象的行为如何定义呢?

同样的,我们之前详细描述了Go中Map数据结构的使用,详见 慢聊Go之Go中的Map|Go主题月慢聊Go之Go中的Map姊妹篇|Go主题月。今天,我们也来简单的做一下Go和Java中集合容器的对比。

Go相关的数据容器和Java的集合框架对比

Go中有的数据结构:数组,切片,map,双向链表,环形链表,堆 Go自己的类库中没有set,没有集合(List),但是第三方库有实现。 Java中有: Map,Set,List,Queue,Stack,数组 Java中没有切片的概念。 Go中的数组打印格式是[1,2,3,4,5] Go中的切片打印格式是[[1,2,3]] Go中切片的概念:切片是数组的一个子集,就是数组截取某一段。 Go的map和Java的map大致相同

Go中的函数,Go的方法和Java中的方法对比

Go中的函数定义

Go中返回值可以有多个,不像Java中多个值得封装到实体或map返回 //注:【】内的返回值可不写,无返回值直接把返回值部分全部去掉即可。 func 函数名(变量1 变量类型,变量2 变量2类型...)【(返回值1 类型1,返回值2 类型2...)】 { //注意:这个方法的右中括号必须和func写在同一行才行,否则报错,不能按c语言中的换行写

示例1:

package main

import "fmt"

func main() {
   //定义局部变量
   var a int = 100
   var b int = 200
   var result int

   //调用函数并返回最大值
   result = max(a, b)

   fmt.Println( "最大值是 :", result )
}

/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
   /* 定义局部变量 */
   var result int

   if (num1 > num2) {
      result = num1
   } else {
      result = num2
   }
   return result
}

示例2:返回多个值

package main

import "fmt"

func main() {
   a, b := swap("li_ming", "xiao_hong")
   fmt.Println(a, b)
}

func swap(x, y string) (string, string) {
   //返回多个值
   return y, x
}

注意点:函数的参数:基础类型是按值传递,复杂类型是按引用传递

示例3: 函数的参数:变长参数传递

package main

import "fmt"

func main() {
	manyArgs(1,2,"2","3","4")
	manyArgs(1,2,"5","5","5")
	dataStr := []string{"11","11","11"}
	//传数组也可以,加三个点
	manyArgs(1,2,dataStr...)
}

//可变参数必须放在最后面
func manyArgs(a int,b int ,str ...string ){
	for i,s := range str {
		fmt.Println(i,s)
	}
}

注意点:函数的返回值:如果有返回值,返回值的类型必须写,返回值得变量名根据情况可写可不写。

示例4: defer:推迟执行(类似于java中的finally)

package main

import "fmt"

func main() {
   testMyFunc();
}


func testDefer1() {
   fmt.Println("print defer1")
}
func testDefer2() {
   fmt.Println("print defer2")
}

func testMyFunc() {
   //defer会在方法返回前执行,有点像java中的finally
   //defer写在任意位置均可,多个defer的话按照逆序依次执行
   defer testDefer2()
   defer testDefer1()
   fmt.Println("print my func")
}

示例5 :丢弃返回值

package main

import "fmt"

func main() {
   //方式一丢弃:丢弃num1和str
   _,num2,_:= testFun(1,2,"3");
   fmt.Println(num2)
   //方式二丢弃:
   _,num3,_:= testFun(1,3,"4");
   fmt.Println(num3)
}

func testFun(num1,num2 int,str string) (n1 int,n2 int,s1 string){
   n1 = num1
   n2 = num2
   s1 = str
   return
}
func testFun2(num1,num2 int,str string) (int,int,string){
   return num1,num2,str
}

2).Java中的方法定义

 访问修饰符   返回值类型   方法名(参数1类型  参数1,参数2类型 参数2...) {

       return 返回值;
 }

示例:

 public Integer doSomething(String name,Integer age) {
    
 		return 20;
 }

总结

时间很快啊,今天,我们学习任务该结束了。今天的学习,相信大家会有进一步的成长。明天见吧。加油,每一个努力追梦的少年。