0


Go语言学习笔记

注:安装教程

注:上一篇笔记

注:下一篇笔记

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语言编程-许式伟

标签: go 开发语言

本文转载自: https://blog.csdn.net/weixin_46042817/article/details/130639231
版权归原作者 binshao.wang 所有, 如有侵权,请联系我们删除。

“Go语言学习笔记”的评论:

还没有评论