注:安装教程
注:上一篇笔记
注:下一篇笔记
一.Go语言详解
2.6、流程控制
2.6.1、条件语句
func main() {
var a = 102
if a>200 {
println("a大于200")
} else if 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 = 100
switch i {
case 1:
println("1")
case 2:
println("2")
fallthrough
case 3:
println("3")
case 4, 5, 6:
println("4, 5, 6")
default:
println("default")
}
/**
用法:第二种
*/
switch {
case 0 <= i && i <= 3:
println("0-3")
case 4 <= i && i <= 6:
println("4-6")
default:
println("default")
}
}
2.6.3、循环语句
func main() {
/**
for用法:第一种
输出:0123456789
*/
for i := 0; i < 10; i++ {
print(i)
}
print("\n")
/*
for用法:第二种用break跳出循环,continue跳过本次循环
输出:3567891011
*/
i := 2
for {
i++
if i == 4 {
continue // i=4时跳过本次循环,继续下次循环
}
print(i)
if i > 10 {
break // i>10时中断本次循环
}
}
//拓展:使用起别名来终止多层循环
JLoop:
for j := 0; j < 5; j++ {
for i := 0; i < 10; i++ {
if i > 5 {
break JLoop
}
println(i)
}
}
}
2.6.4、跳转语句
goto语句跳转到本函数内的某个标签
func main() {
i := 0
HERE:
print(i)
i++
// 满足10>i跳转到HERE位置
if 10 > 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) {
case int:
println(param, "is int")
case string:
println(param, "is string")
default:
println(param, "is no")
}
}
}
2.7.3、匿名函数
匿名函数是指不需要定义函数名的一种函数实现方式文章来源:https://www.toymoban.com/news/detail-460131.html
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 = 2
z := func() func() {
y := 10
return func() {
println("x=", x, "y=", y)
}
}()
z()
x *= 10
z()
}
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 {
return 0, errDivByZero
}
return x / y, nil
}
2.8.2、自定义错误
func main() {
z, err := div(5, 0)
switch e := err.(type) {
case DivError:
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 {
return 0, 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() { //接收异常,必须使用函数才能接收
if err := recover(); err != nil {
log.Println(err)
}
}()
panic("这是一个异常") //抛出异常
}
参考文献
Go语言学习笔记-雨痕
Go语言编程-许式伟文章来源地址https://www.toymoban.com/news/detail-460131.html
到了这里,关于Go语言学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!