Go函数
Posted yzg-14
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go函数相关的知识,希望对你有一定的参考价值。
1. 函数的定义和使用
package main import "fmt" func main() { //程序的入口,是一个特殊的函数 /* 函数:function 一、概念: 具有特定功能的代码,可以被多次调用执行。 二、意义: 1.可以避免重复的代码 2.增强程序的扩展性 三、使用 step1:函数的定义,也叫声明 step2:函数的调用,就是执行函数中代码的过程 四、语法 1.定义函数的语法 func funcName(parametername type1, parametername type2) (output1 type1, output2 type2) { //这里是处理逻辑代码 //返回多个值 return value1, value2 } A:func,定义函数的关键字 B:funcName,函数的名字 C:(),函数的标志 D:参数列表:形式参数用于接收外部传入函数中的数据 E:返回值列表:函数执行后返回给调用处的结果 2、调用函数的语法 函数名(实际参数) 函数的调用处,就是函数调用的位置 3、注意事项 A:函数必须先定义,再调用,如果不定义:undefined: getSum 定义了函数,没有调用,那么函数就失去了意义 B:函数名不能冲突 C:main(),是一个特殊的函数,作为程序的入口,由系统自动调用 而其他函数,程序中通过函数名来调用。 */ //求1-10的和 getSum() //函数的调用处 fmt.Println("hello world....") //求1-10的和 getSum() fmt.Println("aaa...") //求1-10的和 getSum() } //定义一个函数:用于求1-10的和 func getSum() { sum := 0 for i := 1; i <= 100; i++ { sum += i } fmt.Printf("1-100的和是:%d ", sum) }
2. 函数的参数
package main import "fmt" func main() { /* 函数的参数: 形式参数:也叫形参。函数定义的时候,用于接收外部传入的数据的变量。 函数中,某些变量的数值无法确定,需要由外部传入数据。 实际参数:也叫实参。函数调用的时候,给形参赋值的实际的数据 函数调用: 1.函数名:声明的函数名和调用的函数名要统一 2.实参必须严格匹配形参:顺序,个数,类型,一一对应的。 */ //1.求1-10的和 getSum(10) //2.求1-20的和 getSum(20) fmt.Println() //3.1-100的和 getSum(100) //4.求2个整数的和 getAdd(20,10) getAdd2(1,2) fun1(1.3,2.4,"hello") } //定义一个函数:用于求1-10的和 func getSum(n int) { sum := 0 for i := 1; i <= n; i++ { sum += i } fmt.Printf("1-%d的和是:%d ",n, sum) } func getAdd(a int,b int){ sum := a + b fmt.Printf("%d + %d = %d ",a,b,sum) } func getAdd2(a, b int){//参数的类型一致,可以简写在一起 fmt.Printf("a:%d,b:%d ",a,b) } func fun1(a,b float64,c string){ fmt.Printf("a:%.2f,b:%.2f,c:%s ",a,b,c) }
3. 可变参数
package main import "fmt" func main() { /* 可变参数: 概念:一个函数的参数的类型确定,但是个数不确定,就可以使用可变参数。 语法: 参数名 ... 参数的类型 对于函数,可变参数相当于一个切片。 调用函数的时候,可以传入0-多个参数。 Println(),Printf(),Print() append() 注意事项: A:如果一个函数的参数是可变参数,同时还有其他的参数,可变参数要放在 参数列表的最后。 B:一个函数的参数列表中最多只能有一个可变参数。 */ //1.求和 getSum() getSum(1,2,3,4,5) getSum(1,2,3,4,5,6,7,8,9,10) //2.切片 s1 :=[]int{1,2,3,4,5} getSum(s1...) } func getSum(nums ... int){ //fmt.Printf("%T ",nums) //[]int sum := 0 for i := 0;i <len(nums);i++{ sum += nums[i] } fmt.Println("总和是:",sum) } func fun1(s1,s2 string,nums ... float64){ }
4. 值传递和应用传递
package main import "fmt" func main() { /* 数据类型: 一:按照数据类型来分: 基本数据类型: int,float,string,bool 复合数据类型: array,slice,map,struct,interface。。。。 二:按照数据的存储特点来分: 值类型的数据:操作的是数值本身。 int,float64,bool,string,array 引用类型的数据:操作的是数据的地址 slice,map,chan 参数传递: A:值传递:传递的是数据的副本。修改数据,对于原始的数据没有影响的。 值类型的数据,默认都是值传递:基础类型,array,struct B:引用传递:传递的是数据的地址。导致多个变量指向同一块内存。 引用类型的数据,默认都是引用传递:slice,map,chan */ arr1 := [4]int{1,2,3,4} fmt.Println("函数调用前,数组的数据:",arr1) //[1 2 3 4] fun1(arr1) fmt.Println("函数调用后,数组的数据:",arr1) //[1 2 3 4] s1 :=[] int{1,2,3,4} fmt.Println("函数调用前,切片的数据:",s1) // [1 2 3 4] fun2(s1) fmt.Println("函数调用后,切片刀数据:",s1) //[100 2 3 4] } //引用传递 func fun2(s2 []int){ fmt.Println("函数中,切片的数据:",s2) //[1 2 3 4] s2[0] = 100 fmt.Println("函数中,切片的数据更改后:",s2) //[100 2 3 4] } //值传递 func fun1(arr2 [4]int){ fmt.Println("函数中,数组的数据:",arr2) //[1 2 3 4] arr2[0] =100 fmt.Println("函数中,数组的数据修改后:",arr2) //[100 2 3 4] }
5. 函数的返回值
package main import "fmt" func main() { /* 函数的返回值: 一个函数的执行结果,返回给函数的调用处。执行结果就叫做函数的返回值。 return语句: 一个函数的定义上有返回值,那么函数中必须使用return语句,将结果返回给调用处。 函数返回的结果,必须和函数定义的一致:类型,个数,顺序。 1.将函数的结果返回给调用处 2.同时结束了该函数的执行 空白标识符,专门用于舍弃数据:_ */ //1.设计一个函数,用于求1-10的和,将结果在主函数中打印输出 res := getSum() fmt.Println("1-10的和:",res) //1-10的和: 55 fmt.Println(getSum2()) //5050 res1,res2 := rectangle(5,3) fmt.Println("周长:",res1,",面积:",res2) //周长: 16 ,面积: 15 res3,res4 := rectangle2(5,3) fmt.Println("周长:",res3,",面积:",res4) //周长: 16 ,面积: 15 _,res5 := rectangle(5,3) fmt.Println(res5) //15 } //函数,用于求矩形的周长和面积 func rectangle(len,wid float64)(float64,float64){ perimeter := (len +wid) *2 area := len * wid return perimeter,area } func rectangle2(len,wid float64)(peri float64,area float64){ peri = (len +wid)*2 area = len*wid return } func fun1()(float64,float64,string){ return 2.4,5.6,"hello" } //定义一个函数,带返回值 func getSum()int { sum := 0 for i:=1;i<=10;i++{ sum += i } return sum } func getSum2()(sum int){//定义函数时,指明要返回的数据是哪一个 for i:=1;i<=100;i++{ sum += i } return }
package main import "fmt" func main() { /* return语句:词义"返回" A:一个函数有返回值,那么使用return将返回值返回给调用处 B:同时意味着结束了函数的执行 注意点: 1.一个函数定义了返回值,必须使用return语句将结果返回给调用处。return后的数据必须和函数定义的一致:个数,类型,顺序。 2.可以使用_,来舍弃多余的返回值 3.如果一个函数定义了有返回值,那么函数中有分支,循环,那么要保证,无论执行了哪个分支,都要有return语句被执行到 4.如果一个函数没有定义返回值,那么函数中也可以使用return,专门用于结束函数的执行。。 */ a, b, c := fun1() fmt.Println(a, b, c) _, _, d := fun1() fmt.Println(d) fmt.Println(fun2(-30)) fun3() } func fun1() (int, float64, string) { return 0, 0, "hello" } func fun2(age int) int { if age >= 0 { return age } else { fmt.Println("年龄不能为负。。") return 0 } } func fun3(){ for i:=0;i<10;i++{ if i == 5{ //break //?强制结束循环 return } fmt.Println(i) } fmt.Println("fun3()...over....") }
以上是关于Go函数的主要内容,如果未能解决你的问题,请参考以下文章
解决go: go.mod file not found in current directory or any parent directory; see ‘go help modules‘(代码片段
npm : 无法加载文件 D:softcodeProcess ode ode_global pm.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.micr +(代码片段