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