第 8 节:函数-函数类型与作用域

6: 函数类型

package main

import "fmt"

func demo1(a int, b int) {
    fmt.Println(a + b)
}

//func (int,int)int函数类型
func demo2(s1 int, s2 int) {
    fmt.Println(s1 + s2)
}

//定义函数类型 为已存在的数据类型起别名
type FUNCDEMO func(int, int)

func main() {
    //demo1(10, 20)
    //函数的名字表示一个地址 函数在代码区的地址
    fmt.Println(demo1)

    //f是func (int,int)函数类型定义的变量
    //var f func(int, int)
    var f FUNCDEMO
    //函数类型定义的变量结束函数的地址
    f = demo1
    fmt.Println(f)
    //通过f调用函数
    f(10, 20)

    f = demo2
    f(1, 2)

    fmt.Printf("%T", f)
}

7: 07函数的作用域

package main

import "fmt"

//在函数外部定义的变量  成为全局变量
//作用域是在项目中整个文件去使用
//定义的全局变量名不能和其他文件中的全局变量重名
//全局变量名可以和局部变量名重名
//全局变量储存在内存的数据区
//如果全局变量定义时有值 存储在初始化数据区 没有值存储在为初始化数据区
var a int = 10

func main0701() {
    //变量先定义后使用 在函数内部变量名是唯一的
    //在函数内部定义的变量 成为局部变量
    //局部变量的作用域在函数内部

    //a := 10
    //fmt.Println(a)
    //var i int = 10
    //for i = 0; i < 5; i++ {
    //  fmt.Println(i)
    //}
    //fmt.Println(i)

    //在go语言中会采用就进原则 如果在函数内部定义局部变量 和全局变量名重名 会使用局部变量
    a := 123

    //修改全局变量的值
    //如果全局变量的值修改 会影响其他位置使用全局变量的值
    a = 110
    fmt.Println(a)

    demo3()
}

func demo3() {
    fmt.Println(a)
}

func main() {

    //打印代码区的地址   代码区
    fmt.Println(demo3)
    //打印全局变量的地址  数据区
    fmt.Println(&a)
    a := 10
    //打印局部变量的地址  栈区
    fmt.Println(&a)
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
嗨,我是波波。曾经创业,有收获也有损失。我积累了丰富教学与编程经验,期待和你互动和进步! 公众号:上海PHP自学中心 付费知识星球:破解面试:程序员的求职导师
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
司机 @ 欣昊玉
文章
273
粉丝
339
喜欢
558
收藏
1106
排名:64
访问:12.2 万
私信
所有博文
社区赞助商