长春企业自助建站系统,传奇端游平台,弄个微信小程序多少钱,关于旅游的网站建设论文目录
函数返回多个值
init函数和import
init函数
main函数
函数的参数
值传递
引用传递#xff08;指针#xff09; 函数返回多个值
用法如下#xff1a;
package mainimport (fmtstrconv
)// 返回多个返回值#xff0c;无参数名
func Mu…目录
函数返回多个值
init函数和import
init函数
main函数
函数的参数
值传递
引用传递指针 函数返回多个值
用法如下
package mainimport (fmtstrconv
)// 返回多个返回值无参数名
func MultFunc1(a int, b int) (int, string) {a a 1b b 1//数字转字符串itoa : strconv.Itoa(b)return a, itoa}// 返回多个返回值有参数名
func MultFunc2(a int, b int) (r1 int, r2 int) {//形参有默认值 是0fmt.Println(形参r1: , r1, r2: , r2)r1 a 1r2 b 1return}func MultFunc3(a int, b int) (int, int) {a a 1b b 1return a, b}func main() {var a, b MultFunc1(1, 2)fmt.Println(a, a, b, b)var c, d MultFunc2(3, 4)fmt.Println(c, c, d, d)var e, f MultFunc3(5, 6)fmt.Println(e, e, f, f)
}形参是有默认值的 0 (空串) false init函数和import
init函数
init函数可以在package main 中可在其他package中可在同一个package中出现多次
main函数
main 函数只能在package main中。
执行顺序
golang中有两个保留的函数:init函数(能够应用于所有的package)和main函数(只能用于package main)。这两个函数在定义的时候不能有任何的返回值和参数 虽然package里面可以写任意多个init函数但这无论是对于可读性还是以后的可维护性来说都是不方便的所以建议用户在一个package中每个文件只写一个init函数。 程序的初始化和执行都始于main包 如果main包还导入了其它的包那么就会在编译时将它们依次导入。有时一个包会被多个包同时导入那么它只会被导入一次例如很多包可能都会用到fmt包但它只会被导入一次因为没有必要导入多次。
当一个包被导入时如果该包还导入了其它的包那么会先将其它包导入进来然后再对这些包中的包级常量和变量进行初始化接着执行init函数如果有的话依次类推。 等所有被导入的包都加载完毕了就会开始对main包中的包级常量和变量进行初始化然后执行main包中的init函数如果存在的话最后执行main函数。下图详细地解释了整个执行过程 测试例子
代码结构如下 Lib1.go
package lib1import fmtfunc init() {fmt.Print(我是lib1)
}func Lib1Test() {fmt.Println(lib1Test)
}Lib2.go
package lib2import (fmt
)func init() {fmt.Print(我是Lib2)
}
func Lib2Test() {fmt.Println(lib2Test)
}main.go
注意如果文中没有使用就需要家一个_
package mainimport (fmtgoProject/aaa/lib1goProject/aaa/lib2
)func init() {fmt.Print(我是Lib3.go)
}func main() {lib1.Lib1Test()lib2.Lib2Test()}注意看打印的结果
输出的顺序与我们上面图给出的顺序是一致的 函数的参数
函数如果使用参数该变量可称为函数的形参
形参就像是定义在函数体内的局部变量
调用函数可以通过两种方式传递参数
值传递
值传递是指在调用函数的时候将实际的参数复制一份传递到函数中这样在函数中如果对参数进行修改则不会影响到实际的参数。
默认情况下Go 语言使用的是值传递即在调用过程中不会影响到实际参数。
下面使用一个经典的案例两数交换
package mainimport fmt// 值传递
func Swap1(a int, b int) {var temp aa bb temp}// 引用传递
func Swap2(a *int, b *int) {var temp *a*a *b*b temp}func main() {a : 1b : 2Swap1(a, b)fmt.Println(值传递 a, a, b, b)Swap2(a, b)fmt.Println(引用传递 a, a, b, b)
}执行结果如下 第一种值传递的方式交换失败是因为副本拷贝
第一种是引用传递他是传递地址那么引出了指针
引用传递指针
指针在C中有用到。引用传递是指在调用函数时将实际参数的地址传递到函数中那么在函数中对参数所进行的修改将影响到实际参数。
详情可以去看看C,我也去看看