第 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 协议》,转载必须注明作者和本文链接
• 15年技术深耕:理论扎实 + 实战丰富,教学经验让复杂技术变简单 • 8年企业历练:不仅懂技术,更懂业务落地与项目实操 • 全栈服务力:技术培训 | 软件定制开发 | AI智能化升级 关注「上海PHP自学中心」获取实战干货
wangchunbo
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
司机 @ 某医疗行业
文章
315
粉丝
354
喜欢
568
收藏
1139
排名:60
访问:12.6 万
私信
所有博文
社区赞助商