『Go 语言学习专栏』-- 第三期
时间:2022-05-31
本文章向大家介绍『Go 语言学习专栏』-- 第三期,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
golang-learning-third.png
3.png
大家好,我叫谢伟,是一名程序员。
本专栏的主旨是梳理 Golang 知识,力求从入门到中级程序员水平。
学习的过程中,希望不断把好的编程思维和思路引入到代码中,提高代码的美感、可靠性。
和写文章一样,写代码也需要遵循一定的规则,添加一定的修饰等,提升文章的美感,丰富作品。
如果你对我感兴趣,可以在添加个人微信号,或者 Github 上找到我。
这节的主题是: 函数
包括下面几点:任何语言几乎都是这些规则,但是各语言又规定不同的语法。
- 函数的定义
- 参数:定参,不定参数
- 返回值:单个返回值,多个返回值, 命名返回值
- 值传递和指针传递
- 函数作为参数
- 匿名函数
- main 和 init 函数
1. 函数的定义
- 关键字
func
// declare
func example() {
fmt.Println("Hello world")
}
// main
func main() {
example()
}
2. 函数参数:单个参数,不定参数
// arg
func exampleOneArg(arg int) {
fmt.Println(arg + 1)
}
// arg list
func exampleListArg(args ...int) {
for index, value := range args {
fmt.Println(index, value)
}
}
// main
func main() {
exampleOneArg(12)
exampleListArg(1, 2, 3, 4, 5)
}
3. 返回值:单个返回值、多个返回值、命名返回值
// one response
func exampleOneResponse(arg int) int {
return arg*100 + 1
}
// two responses
func exampleTwoResponses(arg int) (int, int) {
return arg * 10, arg * 100
}
// name response
func exampleNameResponse(arg int) (sum int) {
sum = arg * 1000
return
}
// main
func main() {
exampleOneResponse(10)
exampleTwoResponses(10)
exampleNameResponse(10)
}
4. 值传递和指针传递
值传递和指针传递针对的是函数的传入参数究竟是拷贝入参的值进行操作还是拷贝入参的内存地址,带来的效果就是一个能改变传入的参数的值,一个不能改变传入参数的值。
// copy value
func exampleValueCopy(arg int) int {
arg = arg + 1
return arg
}
// copy address
func exampleValueAddress(arg *int) int {
*arg = *arg + 1
return *arg
}
// main
func main() {
var arg int = 10
exampleValueCopy(arg)
fmt.Println(arg) // 10
exampleValueAddress(&arg)
fmt.Println(arg) // 11
}
5. 函数作为参数
// func as arg
func funcArg(arg int) int {
return arg * 100
}
func exampleFuncAsArg(arg int, function func(int) int) int {
return arg + function(arg)
}
// main
func main() {
fmt.Println(exampleFuncAsArg(10, funcArg)) // 1010
}
6. 匿名函数
// un name func
var NoNameFunc = func(arg int) int { return arg * 1000 }
// main
func main() {
fmt.Println(NoNameFunc(10)) // 10000
}
7. main 和init 函数
- 这两个函数没有入参和返回值
- 一个工程有且只有一个 main 函数作为程序的主入口
- 一个工程可以有多个init 函数,执行顺序和包的导入顺序相关
- Hybris CronJob
- tomcat源码编译和环境搭建(r5笔记第83天)
- NumPy 将停止支持 Python 2,这里有一份给数据科学家的 Python 3 使用指导
- Apache solr(一).
- dataguard中MRP无法启动的问题分析和解决(r5笔记第82天)
- Apache solr(二).
- Git 使用技巧
- 4.训练模型之准备训练数据
- 关于dg broker的简单配置(r5笔记第99天)
- 三天速成 TensorFlow课件分享
- 干货 | 机器学习算法线上部署方法
- 用于快速开发 3D 数据处理软件的开源数据处理库 —— Open3D | Github 项目推荐
- 【java网络】IO编程
- 一周 Github Trending 热门项目,最全中华古诗词数据库 | Github 项目推荐
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 彻底明白Android设计模式—(动态)代理模式
- elastic search 如何将yellow 状态变为green健康状态
- All clients has disconnected from. You can graceful shutdown now., dubbo version: , current host
- Failed to instantiate org.mybatis.spring.SqlSessionTemplate Constructor threw exception
- 护网之Linux应急处理操作手册
- 对新版安全狗学习
- redis key的删除策略及LRU的实现
- 护网Linux应急处置操作手册-Tools篇
- 加密,编码三问
- 我是怎么挖掘yii2反序列化0day的
- yii2反序列化后续
- 线程基础三问——猫眼真题
- V8引擎对Array.prototype.push的源码实现
- HTTPS三问—腾讯真题
- 神锁离线版插件的安全设计