前言
最近有点忙,没来得及更新。但是学习的脚步,不应该因任何理由去停下。所以,今天我们继续,我们会多更一下,赶上学习的进步。
之前,我们在慢聊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; }
总结
时间很快啊,今天,我们学习任务该结束了。今天的学习,相信大家会有进一步的成长。明天见吧。加油,每一个努力追梦的少年。