golang 函数笔记

一、概念

函数可以让我们将一个语句序列打包为一个单元,然后可以从程序中其它地方多次调用。函数的机制可以让我们将一个大的工作分解为小的任务,这样的小任务可以让不同程序员在不同时间、不同地方独立完成。一个函数同时对用户隐藏了其实现细节。由于这些因素,对于任何编程语言来说,函数都是一个至关重要的部分。

二、函数的声明及使用

package main

import (
    "fmt"
)

func main() {
    say("hello")
}

func say(info string) {
    fmt.Println("Say:", info)
}

三、多返回值函数

package main

import (
    "fmt"
)

func main() {
    id, name := get()
    fmt.Println(id, name)
}

func get() (int, string) {
    return 1, "frod"
}

四、匿名函数

package main

import (
    "fmt"
)

func main() {
    // 传递一个匿名函数
    res := sum(func() (int, int) { return 1, 2 })
    fmt.Println(res)
}

// 匿名函数当作函数的参数
func sum(f func() (int, int)) int {
    a, b := f()
    return a + b
}

五、匿名函数-闭包函数

package main

import (
    "fmt"
)

func main() {
    // sum() 内部是一个闭包函数, 闭包函数是立即执行的
    res := sum(func() (int, int) { return 1, 2 }())
    fmt.Println(res)
}

func sum(a, b int) int {
    return a + b
}

六、匿名函数-嵌套,意义不是特别大,只是为了基础学习

package main

import (
    "fmt"
)

func main() {
    res := func() int {
        a, b := func() (int, int) { return 1, 2 }()
        return a + b
    }()
    fmt.Println(res)
}

七、函数-可变参数

package main

import (
    "fmt"
)

func main() {
    fmt.Println(sum(1, 2, 3, 4, 5, 6))
}

func sum(vals ...int) int {
    var sum int
    for v := range vals {
        sum += v
    }
    return sum
}
时间: 2024-10-18 00:58:58

golang 函数笔记的相关文章

Golang(笔记) 面向对象

package main import ( "fmt" ) //对象定义 type Rect struct{ x,y float64 width ,height float64 } //对象方法实现 func (r *Rect) Area()float64{ return r.width*r.height } //Go语言没有构造函数的概念 //对象的创建通常交由一个全局的创建函数NewXXX来命名 标识构造函数 func NewRect(x,y,width,height float6

Oracle单行函数笔记

Oracle中单行函数的分类:1.字符函数substr():字符串截取select substr('我爱你,你知道么?',0,4) from dual执行结果:我爱你,length函数:字符串长度select length('我爱你,你知道么?') from dual执行结果:9Replace()函数:替换指定字符select replace('我爱你,你知道么?','你','的是他') from dual执行结果:我爱的是他,的是他知道么?upper函数:转字母大写select upper('

Golang(笔记) 顺序编程

package main import ( "fmt" "bufio" "io" "os" "strconv" "flag" ) var infile *string=flag.String("i","unsorted.data","File contains values for sorting") var outfile *

golang函数可变参数传递性能问题

几天前纠结了一个蛋疼的问题,在go里面函数式支持可变参数的,譬如...T,go会创建一个slice,用来存放传入的可变参数,那么,如果创建一个slice,例如a,然后以a...这种方式传入,go会不会还会新建一个slice,将a的数据全部拷贝一份过去? 如果a很大,那么将会造成很严重的性能问题,不过后来想想,可能是自己多虑了,于是查看go的文档,发现如下东西: Passing arguments to ... parameters If f is variadic with a final pa

golang学习笔记————字符串

字符串的创建 在golang中 字符串是使用双引号("")包裹住的字符序列: 字符是使用单引号('')包裹住的单一字符: 声明字符串的方式:var strvalue string 声明并创建的方式:strvalue := "This is a string!"; KeyPoint: 一旦字符串变量被初始化后,则不可单独改变该字符串序列中的某一字符:但该字符串变量可以重新被赋值: Ex:   strvalue := "abcd" fmt.Print

golang 函数作为类型

golang 函数作为类型 package main import "fmt" type A func(int, int) func (f A)Serve() { fmt.Println("serve2") } func serve(int,int) { fmt.Println("serve1") } func main() { a := A(serve) a(1,2) a.Serve() } type functinTyoe func(int)

GO开发[四]:golang函数

函数 1.声明语法:func 函数名 (参数列表) [(返回值列表)] {} 2.golang函数特点: a. 不支持重载,一个包不能有两个名字一样的函数 b. 函数是一等公民,函数也是一种类型,一个函数可以赋值给变量 c. 匿名函数 d. 多返回值 定义函数类型type: package main import "fmt" type add_func func(int, int) int func add(a, b int) int { return a + b } func sub

electron/nodejs实现调用golang函数

https://www.jianshu.com/p/a3be0d206d4c 思路 golang 支持编译成c shared library, 也就是系统中常见的.so(windows下是dll)后缀的动态链接库文件. c++可以调用动态链接库,所以基本思路是golang开发主要功能, c++开发插件包装golang函数,实现中转调用 对于类型问题, 为了方便处理, 暴露的golang函数统一接受并返回字符串, 需要传的参数都经过json编码, 返回值亦然. 这里实现了3种调用方式, 同步调用,

golang学习笔记-func函数

函数function - Go函数不支持 嵌套.重载和默认参数 - 但支持以下特性: 无需声明原形.不定长变参.多返回值.命令返回值参数.匿名函数.闭包 - 定义函数使用关键字func,且大括号不能另起一行(所有有大括号的均遵循此原则) - 函数也可以作为一种类型的使用,直接赋值给变量(匿名函数) 定义一个函数 格式:func name( 传入的变量1 类型,变量2 类型 ) [ 返回变量 类型,变量 类型 ]{ } - 传入的变量可以没有,也可以使多个 - 当传入的变量类型相同时,可以全部省略