注:安装教程
注:上一篇笔记
注:下一篇笔记
Go语言详解
一.Go语言详解
2.6、流程控制
2.6.1、条件语句
func main(){var a =102if a>200{println("a大于200")}elseif a>100{println("a小于等于200且大于100")}else{println("a小于等于100")}}
2.6.2、选择语句
func main(){/**
用法:第一种
i=0输出0
i=2输出2 3 注:添加fallthrough关键字会执行下一个case
i=4或5或6,输出"4, 5, 6"
其他输出"default"
*/var i =100switch i {case1:println("1")case2:println("2")
fallthrough
case3:println("3")case4,5,6:println("4, 5, 6")default:println("default")}/**
用法:第二种
*/switch{case0<= i && i <=3:println("0-3")case4<= i && i <=6:println("4-6")default:println("default")}}
2.6.3、循环语句
func main(){/**
for用法:第一种
输出:0123456789
*/fori:=0; i <10; i++{print(i)}print("\n")/*
for用法:第二种用break跳出循环,continue跳过本次循环
输出:3567891011
*/i:=2for{
i++if i ==4{continue// i=4时跳过本次循环,继续下次循环}print(i)if i >10{break// i>10时中断本次循环}}//拓展:使用起别名来终止多层循环JLoop:forj:=0; j <5; j++{fori:=0; i <10; i++{if i >5{break JLoop
}println(i)}}}
2.6.4、跳转语句
goto语句跳转到本函数内的某个标签
func main(){i:=0HERE:print(i)
i++// 满足10>i跳转到HERE位置if10> i {
goto HERE}}
2.7、函数
2.7.1、函数定义
函数构成代码执行的逻辑结构。函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句。
package main //package定义包名import"fmt"//import导入包,必须使用否则报错
func main(){//main主函数入口,只能一个c:=addAB(2,3)//返回值 := 函数名(参数1,参数2)
fmt.Println(c)//打印返回值//返回参数有多个,可以用","分隔接收
c,d:=add_AB(2,3)
fmt.Println(c, d)//"_"占位符,在这里表示不接收d
c, _ =add_AB(2,3)
fmt.Println(c)}/*
函数定义介绍 相加函数
注意:函数首字母小写只能在本package包内使用,调用 函数名()
如果想外包使用该函数,首字母大写,外部调用 包名.函数名()
*/
func addAB(a, b int)(c int){//func定义函数名,addAB函数名,a和b参数列表,c返回值return a + b //return 返回语句}
func add_AB(a, b int)(c int, d string){//func定义函数名,addAB函数名,a和b参数列表,c,d返回值return a + b,"成功"//return 返回语句}
2.7.2、不定参数
不定参数是指函数传入的参数个数为不定数量。合适地使用不定参数,可以让代码简单易用,尤其是输入输出类函数,比如日志函数等。
func main(){//不定参数调用printArgs(1,2,4,5,6,7)println()printArgs(3,4,8)println()//不定参数类型调用printArgsType(1,"string",true,"wang",false,2)}/*
函数:根据入参实现"->"分隔输出控制台
*/
func printArgs(params ...int){for _,param:= range params {print("->", param)}}/*
函数:根据入参实现"->"分隔输出控制台
*/
func printArgsType(params ...interface{}){//参数类型用interface定义for _,param:= range params {switch param.(type){caseint:println(param,"is int")casestring:println(param,"is string")default:println(param,"is no")}}}
2.7.3、匿名函数
匿名函数是指不需要定义函数名的一种函数实现方式
func main(){/*
第一种匿名函数,
*///函数体直接赋值变量f:=func(a, b int) int {return a + b
}//调用f(2,3)/*
第二种匿名函数,直接匿名和调用
*/func(a, b int) int {return a + b
}(1,3)// 花括号后直接跟参数列表表示函数调用}
2.7.4、闭包函数
func main(){var x =2z:=func()func(){y:=10returnfunc(){println("x=", x,"y=", y)}}()z()
x *=10z()}
2.8、错误处理
2.8.1、错误处理实例
import("errors""log")
func main(){
z,err:=div(1,0)if errDivByZero == err {
log.Fatalln(err)}else{println("z=", z)}}var errDivByZero = errors.New("division by zero")/*
定义一个除法函数,如果被除数为0抛出错误
*/
func div(x, y int)(int, error){if y ==0{return0, errDivByZero
}return x / y, nil
}
2.8.2、自定义错误
func main(){
z,err:=div(5,0)switche:= err.(type){caseDivError:println(err.Error(),"x=", e.x," y=", e.y)default:println("z=", z)}}
type DivError struct {//自定义错误
x, y int
}func(DivError)Error() string {//实现error接口Error()方法,建立自定义错误和error关联return"division by zero"}/*
定义一个除法函数,如果被除数为0抛出错误
*/
func div(x, y int)(int, error){if y ==0{return0, DivError{x, y}}return x / y, nil
}
2.8.3、panic()和recover()
func main(){/*
panic()和recover()
func panic(interface{}) 抛出异常
func recover() interface{} 处理异常
defer 延迟处理
*/
defer func(){//接收异常,必须使用函数才能接收iferr:=recover(); err != nil {
log.Println(err)}}()panic("这是一个异常")//抛出异常}
参考文献
Go语言学习笔记-雨痕
Go语言编程-许式伟
版权归原作者 binshao.wang 所有, 如有侵权,请联系我们删除。