原创

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

1、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;
}

本文链接地址:http://www.ysxbohui.com/article/174

正文到此结束