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

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

前言

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

之前,我们在慢聊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;
 }

总结

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


目录
相关文章
|
Go Cloud Native
为什么要写技术文章 | GO主题月
这个问题对于每一个人来说各有各的原因。有的为了写作变现,有的为了自己的兴趣,写小说,写文章,写书。
为什么要写技术文章 | GO主题月
|
网络安全 Go Cloud Native
SSH连接服务器后执行多条命令 |Go主题月
大家平时有没有遇到自己连接云服务器,ssh 连接上去之后,发现自己的一些小工具用不了 例如go build无法使用 ,由于我们安装配置golang 环境的时候,是在文件/etc/profile中写了配置,因此需要source 一下/etc/profile
164 0
SSH连接服务器后执行多条命令 |Go主题月
|
存储 JSON Go
|
存储 安全 编译器
|
移动开发 算法 编译器
OAUTH之钉钉第三方授权 | GO主题月
hello,我是小魔童哪吒,欢迎点击关注,有更新,将第一时间呈现到你的面前 胖sir:小魔童,我今天收到了一个需求,期望我们做一个第三方登录的功能,用户可以通过第三方授权来登录我们的web
306 0
|
Linux Go Windows
|
Go Windows Cloud Native
5个步骤搞定protoc环境安装 | GO主题月
[TOC] 胖sir:不知道你有没有这样的疑惑,工作中发现很多新接触GO的小伙伴安装protoc的环境需要折腾很久,刚才开我装环境的时候也是花了好长时间,最后如何装好的也不知原因,网上查找了各种资源,也没有一篇文章可以很好的解决这个问题.
1614 0
|
8天前
|
Go
Go 语言循环语句
在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。
17 1
|
7天前
|
Go 开发者
探索Go语言的并发之美
在Go语言的世界里,"并发"不仅仅是一个特性,它是一种哲学。本文将带你领略Go语言中goroutine和channel的魔力,揭示如何通过Go的并发机制来构建高效、可靠的系统。我们将通过一个简单的示例,展示如何利用Go的并发特性来解决实际问题,让你的程序像Go一样,轻盈而强大。
|
8天前
|
JSON Go API
使用Go语言和Gin框架构建RESTful API:GET与POST请求示例
使用Go语言和Gin框架构建RESTful API:GET与POST请求示例
下一篇
无影云桌面