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

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 函数,执行顺序和包的导入顺序相关

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

Python最简编码规范

1937
来自专栏Fundebug

5分钟掌握JavaScript小技巧

1164
来自专栏机器学习算法与Python学习

Python最简编码规范

1976
来自专栏前端杂货铺

前端开发中的字符编码

前端开发过程中会接触各种各样的编码,比较常见的主要是UTF-8和HTML实体编码,但是web前端的世界却不止这两种编码,而且编码的选择也会造成一定的问题,如前后...

3228
来自专栏极客猴

内容提取神器 beautiful Soup 的用法

上篇文章只是简单讲述正则表达式如何读懂以及 re 常见的函数的用法。我们可能读懂别人的正则表达式,但是要自己写起正则表达式的话,可能会陷入如何写的困境。正则表达...

853
来自专栏ytkah

phpcms调用子栏目名称/文章怎么操作

  phpcms调用子栏目名称相对比较简单一些,也是用{pc:content}来调用,只是把action设置为category,catid如果为0的话是调用所有...

2877
来自专栏Python爬虫实战

Python数据类型之字符串

字符串就是一系列的字符。Python中,用配对的引号括起来的都是字符串,其中引号可以是单引号也可以是双引号:

822
来自专栏前端迷

[译]JavaScript ES6  让我们写得少,做得多

JavaScript ES6 带来了新的语法和新的强大功能,使代码更现代,更易读。它允许您编写更少的代码并执行更多操作。 ES6 向我们介绍了许多强大的功能,如...

881
来自专栏水击三千

ARCGIS接口详细说明

ArcGIS接口详细说明 目录 ArcGIS接口详细说明... 1 1.      IField接口(esriGeoDatabase)... 2 2.     ...

3846
来自专栏coding

Linux笔记5.展开与引用

1334

扫码关注云+社区