Go语言基础-函数

package main

 

import (

"errors"

"fmt"

)

 

// 函数

// 函数定义:

func Add(a int, b int) (ret int, err error) {

 

if a < 0 || b < 0 {

err = errors.New("should be non-negative numbers!")

return

}

return a + b, nil //支持多重返回值

 

}

 

//参数类型相同可这样声明

func Add1(a, b int) (ret int, err error) {

return 0, nil

}

 

// 返回值列表中返回的类型相同,也可以合并

func Add2(a, b int) int {

return 0

}

 

//函数命名规范

// 小写字母开头的函数只在本包内可见, 大写字母开头的函数才能被其他包使用\

 

// 不定参数类型

// ...type这个语法糖,再函数调用的时候,使代码更易读

 

func myfunc1(args ...int) {

for _, arg := range args {

fmt.Println(arg)

}

}

 

func myfunc2(args []int) {

for _, arg := range args {

fmt.Println(arg)

}

}

 

// 不定参数的传递

func myfunc3(args ...int) {

myfunc1(args...)     //按原样传递

myfunc1(args[1:]...) //分片传递

}

 

// 任意类型的不定参数

// 使用...interface{}传递任意类型数据是Go语言的惯用用法

 

func MyPrintf(args ...interface{}) {

for _, arg := range args {

switch arg.(type) {

case int:

fmt.Println(arg, "is an int value")

case string:

fmt.Println(arg, "is a string value")

case int64:

fmt.Println(arg, "is an int64 value")

default:

fmt.Println(arg, "is an unknown type")

}

}

}

 

// 多返回值

// Go语言并不需要强制命名返回值,但是命名后的返回值可以让代码更清晰, 可读性更强

// 不关心的返回值,可以使用 '_' 来跳过这个返回值

// n, _ := f.Read(buf)

func main() {

 

fmt.Println(Add(2, 3))

myfunc1(1, 2, 3)

myfunc2([]int{1, 2, 3})

myfunc3(1, 2, 3)

 

var v1 int = 1

var v2 int64 = 123

var v3 string = "hello"

var v4 float32 = 1.234

MyPrintf(v1, v2, v3, v4)

 

// 匿名函数

f := func(x, y int) int {

return x + y

}(3, 4) // 花括号后直接跟参数列表表示函数调用

fmt.Println(f)

// fmt.Println(f(3, 4))

 

}

 

你可能感兴趣的:(Go)