两种传递方式
1.值传递
2.引用传递
值传递是值拷贝,引用传递是地址拷贝,地址拷贝效率高,值拷贝数据越大效率越低。
值类型和引用类型
1.值类型:基本数据类型Int, float, bool, string, 结构体struct。
2.引用类型:指针、Slice切片、map、管道channel、接口interface等
变量作用域
局部变量:仅限函数内部使用的变量
func test(){
age:=10
Name :="hello"
}
全局变量:函数外定义的,首字母大写在别的包也可以使用
var age int =50
var Name string = "leo" //其他包也可以使用
func test(){
age:=10
Name :="hello"
}
在代码块for/if, 变量作用率就只在该代码块。
for i:=0; i<=10;i++{
fmt.Println(i) //外面无法使用i
}
Time相关函数
package main
//可变参数放在形参列表中最后
//init函数在Main之前执行
import (
"fmt"
"time"
)
func main() {
now :=time.Now()
fmt.Println("年=%v", now.Year())
fmt.Println("月=%v", int(now.Month()))
fmt.Println("日=%v", now.Day())
fmt.Println("时=%v", now.Hour())
fmt.Println("分=%v", now.Minute())
fmt.Println("秒=%v", now.Second())
//格式化日期时间
i:=0
for {
i++
fmt.Println(i)
time.Sleep(time.Millisecond*100)
if i==100{
break;
}
}
}
获取当前时间,求时间段
time.Now().Unix()
二、错误处理
使用defer+recover()函数来捕获错误,之后的代码可以被执行。
package main
//可变参数放在形参列表中最后
//init函数在Main之前执行
import (
"fmt"
)
func test(){
defer func(){
if err:= recover(); err !=nil{
fmt.Println("此函数程序发生出错")
}
}()
num1 :=10
num2:=0
res :=num1/num2
fmt.Println(res)
}
func main() {
test()
//defer panic, recover
fmt.Println("以下代码将被继续执行")
}
网友评论