Go语言学习笔记

这篇具有很好参考价值的文章主要介绍了Go语言学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

注:安装教程

注:上一篇笔记

注:下一篇笔记

一.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、匿名函数

匿名函数是指不需要定义函数名的一种函数实现方式

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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go语言学习笔记(二)

    以下是一些推荐的Go语言学习资源的链接: Go语言教程:https://golang.org/doc/ Go by Example:Go by Example Golang Tutorials:https://golangtutorials.com/ Go语言第一课(慕课网):PHP模糊查询技术案例视频教程-慕课网 Go语言进阶教程(实验楼):极客企业版 Go语言高级编程(GitBook):谁是凶手

    2024年01月20日
    浏览(52)
  • Go语言学习笔记(三)

    教程:文档 - Go 编程语言 (studygolang.com) 在call-module-code需要注意,需要在hello目录下操作 这是一个在Go项目的模块管理中的命令。在Go的模块管理工具( go mod )中,这个命令用于修改模块依赖关系。 具体来说, go mod edit -replace example.com/greetings=../greetings  这个命令的作用是:

    2024年02月02日
    浏览(47)
  • Go语言学习笔记(狂神说)

    视频地址:https://www.bilibili.com/video/BV1ae41157o9 聊聊Go语言的历史-KuangStudy-文章 下面列举的是原生使用Go语言进行开发的部分项目。 Docker Docker 是一种操作系统层面的虚拟化技术,可以在操作系统和应用程序之间进行隔离,也可以称之为容器。Docker 可以在一台物理服务器上快速

    2024年02月15日
    浏览(45)
  • 《Go 语言第一课》课程学习笔记(九)

    Go 语言在常量方面的创新包括下面这几点: 支持无类型常量; 支持隐式自动转型; 可用于实现枚举。 Go 语言的常量是一种在源码编译期间被创建的语法元素。这是在说这个元素的值可以像变量那样被初始化,但它的初始化表达式必须是在编译期间可以求出值来的。 Go 常量

    2024年02月12日
    浏览(45)
  • 《Go 语言第一课》课程学习笔记(十一)

    针对程序的分支结构,Go 提供了 if 和 switch-case 两种语句形式;而针对循环结构,Go 只保留了 for 这一种循环语句形式。 if 语句 if 语句是 Go 语言中提供的一种分支控制结构,它也是 Go 中最常用、最简单的分支控制结构。它会根据布尔表达式的值,在两个分支中选择一个执行

    2024年02月11日
    浏览(51)
  • 《Go 语言第一课》课程学习笔记(五)

    Go 语言中有一个特殊的函数:main 包中的 main 函数,也就是 main.main,它是所有 Go 可执行程序的用户层执行逻辑的入口函数。 Go 程序在用户层面的执行逻辑,会在这个函数内按照它的调用顺序展开。 main 函数的函数原型非常简单,没有参数也没有返回值。 Go 语言要求:可执行

    2024年02月12日
    浏览(49)
  • 《Go 语言第一课》课程学习笔记(二)

    在 Go 语言中编写一个可以打印出“hello,world”的示例程序,我们只需要简单两步,一是创建文件夹,二是开始编写和运行。 通常来说,Go 不会限制我们存储代码的位置,建议创建一个可以集合所有项目的根文件夹(比如:~/goprojects),然后将所有的项目都放在里面。 对于

    2024年02月12日
    浏览(44)
  • 《Go 语言第一课》课程学习笔记(十二)

    在 Go 语言中,函数是唯一一种基于特定输入,实现特定任务并可返回任务执行结果的代码块(Go 语言中的方法本质上也是函数)。 在 Go 中,我们定义一个函数的最常用方式就是使用函数声明。 第一部分是 func,Go 函数声明必须以 func 开始。 第二部分是函数名。

    2024年02月11日
    浏览(53)
  • 《Go 语言第一课》课程学习笔记(八)

    Go 语言的类型大体可分为基本数据类型、复合数据类型和接口类型这三种。 其中,我们日常 Go 编码中使用最多的就是基本数据类型,而基本数据类型中使用占比最大的又是数值类型。 Go 语言的整型,主要用来表示现实世界中整型数量等。它可以分为平台无关整型和平台相关

    2024年02月12日
    浏览(56)
  • 《Go 语言第一课》课程学习笔记(十三)

    Go 语言从设计伊始,就不支持经典的面向对象语法元素,比如类、对象、继承,等等,但 Go 语言仍保留了名为“方法(method)”的语法元素。当然,Go 语言中的方法和面向对象中的方法并不是一样的。Go 引入方法这一元素,并不是要支持面向对象编程范式,而是 Go 践行组合

    2024年02月10日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包