美文网首页Go语言Go 语言学习专栏 Golang
『Go 语言学习专栏』-- 第三期

『Go 语言学习专栏』-- 第三期

作者: 谢小路 | 来源:发表于2018-05-09 08:28 被阅读124次
golang-learning-third.png 3.png

大家好,我叫谢伟,是一名程序员。

本专栏的主旨是梳理 Golang 知识,力求从入门到中级程序员水平。

学习的过程中,希望不断把好的编程思维和思路引入到代码中,提高代码的美感、可靠性。

和写文章一样,写代码也需要遵循一定的规则,添加一定的修饰等,提升文章的美感,丰富作品。

如果你对我感兴趣,可以在添加个人微信号,或者 Github 上找到我。

这节的主题是: 函数

包括下面几点:任何语言几乎都是这些规则,但是各语言又规定不同的语法。

  1. 函数的定义
  2. 参数:定参,不定参数
  3. 返回值:单个返回值,多个返回值, 命名返回值
  4. 值传递和指针传递
  5. 函数作为参数
  6. 匿名函数
  7. 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 函数,执行顺序和包的导入顺序相关

相关文章

  • 『Go 语言学习专栏』-- 第三期

    大家好,我叫谢伟,是一名程序员。 本专栏的主旨是梳理 Golang 知识,力求从入门到中级程序员水平。 学习的过程...

  • Go 语言学习技巧和编程思维

    Go 语言学习技巧和编程思维 一、了解 Go 语言 了解 Go 语言背景 学习 Go 语言,首先要了解 Go 语言...

  • 【语言实践】实践专栏的一些想法

    1 语言学习专栏回顾 前面针对如何快速学习一门语言进行了陈述和说明,也做了总结。而且是这几年基于快速学习go语言这...

  • 初识Go语言-1

    Go语言学习路径 初识Go语言 Go语言环境搭建与IDE安装 Go语言基础语法 Go语言数据类型 Go语言变量和常...

  • 笨办法学golang(三)

    这是Go语言学习笔记第三篇。 Go语言学习笔记参考书籍「Go语言圣经」以及Go官方标准库 Go语言基本类型主要有布...

  • 第一篇:为什么要学习Go语言?

    学习书籍--许式伟、吕桂华等编著《Go语言编程》 目录 一、几种语言的理解 二、为什么要学习Go语言?(Go语言最...

  • 并发编程

    学习来源:Go语言实战、blibli 黑马程序员 20小时快速入门go语言(中) Go语言的优势 Go语言设计简单...

  • 《Go语言实战》笔记(一)|Go包管理

    申金鑫 17101223365 转载自知乎专栏 Go语言实战笔记 【嵌牛导读】:本教程详细介绍了Go语言的一些包的...

  • 笨办法学golang(二)

    这是Go语言学习笔记的第二篇文章。 Go语言学习笔记参考书籍「Go语言编程」、Go官方标准库 前文提要 上篇文章中...

  • 《深入学习Go语言》

    《深入学习Go语言》8月火热上市:当当,天猫,京东同步发售。 本书适合初次学习Go语言,以及对Go语言有初步了解的...

网友评论

  • 码上说:命名返回值可以稍微展开说一下
  • 酱酥:虽然有点基础,但感觉跟着你走再结合一些高级开发效率会更高,基础知识得到巩固的同时,又不缺乏实战经验

本文标题:『Go 语言学习专栏』-- 第三期

本文链接:https://www.haomeiwen.com/subject/qpbbrftx.html