5.1囲碁関数定義

1つの[関数の定義

機能を行く意味:個々の関数のコードを持っていることの期間は、プログラム内の他の場所で複数回呼び出すことができます。

カスタム関数、システム関数に移動します。

関数は、小さなタスクに分け、大きな仕事になることができます。

ユーザの詳細から隠さ機能。

Golang機能の特徴:

支持不定长参数
支持多返回值
支持命名返回参数
支持匿名函数、闭包
函数也是类型,可以赋值给变量

一个package下不得有两个同名函数,不支持函数重载

函数参数可以没有,或者多个参数
注意类型在变量名后面
多个连续的函数命名参数是同一类型,除了最后一个类型,其余可以省略
函数可以返回任意数量的返回值
函数体中,形参作为局部变量
函数返回值可以用 _标识符进行忽略

main()函数由编译器调用,其他函数手动调用

機能基本的な構文を行きます:

1)パラメータ:入力パラメータ

2)コードの実行:機能コードブロックが実現されています

関数3)任意の戻り値

func 函数名(形参列表)(返回值列表){
    执行代码
    return 返回值列表
}

func test(x, y int, z string) (int, string) {
    //类型相同的相邻参数x,y参数类型可以合并
    //多返回值得用括号括起来
    n := x + y
    return n, z
}

1.1。関数の戦闘

package main

import "fmt"

//最普通的函数,无参数,无返回值
func sayHello() {
    fmt.Printf("hello world\n")
}

//求和函数add
func add(a, b, c int) int {
    //sum := a + b + c
    //return sum
    return a + b
}

//接收2个参数a 和b都是int类型
//返回2个参数,sum和sub作为返回值,也叫做对返回值命名
func calc(a, b int) (sum int, sub int) {
    sum = a + b
    sub = a - b
    return
}

//接收不定长参数个数,
//参数名是b,类型是不固定个数的int类型
//变量b此时是一个slice切片,数据类型:[]int,可以通过索引取值
func calc_v1(b ...int) int {
    sum := 0
    for i := 0; i < len(b); i++ {
        sum = sum + b[i]
    }
    return sum
}

func main() {
    //调用函数
    sayHello()
    //打印返回值求和结果
    fmt.Println(add(5, 5, 5))

    //多个返回值
    sum1, sub1 := calc(5, 10)
    fmt.Printf("calc计算和是%d\n", sum1)
    fmt.Printf("calc计算差是%d\n", sub1)

    //传入不固定长度的参数个数
    sum := calc_v1(10, 20, 30, 40)
    fmt.Println(sum)

}

1.2。機能の注意を行きます

1)基本データ型とデフォルトのアレイ值传递、コピー処理値は、元の変数を変更しません

package main

import "fmt"

func modify(n int) {
    n = n + 100
    fmt.Println("modify函数修改后n=", n)
}

func main() {
    num := 10
    modify(num)
    fmt.Println("此时main主程中的nun值=", num)
}

あなたが外で機能することができ、変数の機能を変更したい場合は2)、である必要があり指针传递、入ってくる変数地址、機能指针変数を操作します。

package main

import "fmt"

//指针变量,接收一个地址
func modify2(n *int) {
    *n = *n + 100
    fmt.Println("modify2修改后n的值=", *n)
}

func main() {
    num2 := 10
    modify2(&num2)
    fmt.Println("此时main主程中的num2值=", num2)
}

1.3。Init関数

各ファイルは、main関数の前に行われるソースINTI機能を、含まれています。

package main

import "fmt"

func init() {
    fmt.Println("init函数一般完成初始化工作,如数据库驱动连接等")
}

func main() {
    fmt.Println("我是主程序")
}

1.4。Init関数の詳細

プログラムのロード処理を行きます:

全局变量
↓
init函数
↓
main函数
package main

import "fmt"

//全局变量
var num = test()

func test() int {
    fmt.Println("执行了test()函数")
    return 999
}

func init() {
    fmt.Println("执行了init函数")
}

func main() {
    fmt.Println("我是主程序")
    fmt.Println(num)
}

インタビューの質問:

インポート、main.goをパッケージ化し、utils.goは可変負荷、初期化機能実行プロセスを持っている場合は?

main.go是程序入口
↓
自上而下,进入import导入
↓
优先进入utils.go 加载全局变量  这是第一步
↓
执行utils.go的init函数        第二步
↓
完毕后,回到main.go的全局变量    第三步
↓
执行main.go的init函数        第四步
↓
执行main.go的主程main()函数    第五步

おすすめ

転載: www.cnblogs.com/open-yang/p/11256832.html