当前位置: 首页 > news >正文

嘉兴网站模板建站百度旗下所有app列表

嘉兴网站模板建站,百度旗下所有app列表,公司做网站费用计入什么科目,公司响应式网站1.变量作用域 全局变量 全局变量是定义在函数外部的变量#xff0c;它在程序整个运行周期内都有效。 在函数中可以访问到全局变量。 package mainimport fmt//定义全局变量num var num int64 10func testGlobalVar() {fmt.Printf(num%d\n, num) /…1.变量作用域 全局变量 全局变量是定义在函数外部的变量它在程序整个运行周期内都有效。 在函数中可以访问到全局变量。 package mainimport fmt//定义全局变量num var num int64 10func testGlobalVar() {fmt.Printf(num%d\n, num) //函数中可以访问全局变量num } func main() {testGlobalVar() //num10 }局部变量 局部变量又分为两种 函数内定义的变量无法在该函数外使用例如下面的示例代码main函数中无法使用testLocalVar函数中定义的变量x func testLocalVar() {//定义一个函数局部变量x,仅在该函数内生效var x int64 100fmt.Printf(x%d\n, x) }func main() {testLocalVar()fmt.Println(x) // 此时无法使用变量x }如果局部变量和全局变量重名优先访问局部变量。 package mainimport fmt//定义全局变量num var num int64 10func testNum() {num : 100fmt.Printf(num%d\n, num) // 函数中优先使用局部变量 } func main() {testNum() // num100 }接下来我们来看一下语句块定义的变量通常我们会在if条件判断、for循环、switch语句上使用这种定义变量的方式。 func testLocalVar2(x, y int) {fmt.Println(x, y) //函数的参数也是只在本函数中生效if x 0 {z : 100 //变量z只在if语句块生效fmt.Println(z)}//fmt.Println(z)//此处无法使用变量z }还有我们之前讲过的for循环语句中定义的变量也是只在for语句块中生效 func testLocalVar3() {for i : 0; i 10; i {fmt.Println(i) //变量i只在当前for语句块中生效}//fmt.Println(i) //此处无法使用变量i }2.函数类型与变量 定义函数类型 我们可以使用type关键字来定义一个函数类型具体格式如下 type calculation func(int, int) int上面语句定义了一个calculation类型它是一种函数类型这种函数接收两个int类型的参数并且返回一个int类型的返回值。 简单来说凡是满足这个条件的函数都是calculation类型的函数例如下面的add和sub是calculation类型。 func add(x, y int) int {return x y }func sub(x, y int) int {return x - y }add和sub都能赋值给calculation类型的变量。 var c calculation c add函数类型变量 我们可以声明函数类型的变量并且为该变量赋值 func main() {var c calculation // 声明一个calculation类型的变量cc add // 把add赋值给cfmt.Printf(type of c:%T\n, c) // type of c:main.calculationfmt.Println(c(1, 2)) // 像调用add一样调用cf : add // 将函数add赋值给变量ffmt.Printf(type of f:%T\n, f) // type of f:func(int, int) intfmt.Println(f(10, 20)) // 像调用add一样调用f }3.高阶函数 高阶函数分为函数作为参数和函数作为返回值两部分。 函数作为参数 函数可以作为参数 func add(x, y int) int {return x y } func calc(x, y int, op func(int, int) int) int {return op(x, y) } func main() {ret2 : calc(10, 20, add)fmt.Println(ret2) //30 }函数作为返回值 函数也可以作为返回值 func do(s string) (func(int, int) int, error) {switch s {case :return add, nilcase -:return sub, nildefault:err : errors.New(无法识别的操作符)return nil, err} }4.匿名函数和闭包 匿名函数 函数当然还可以作为返回值但是在Go语言中函数内部不能再像之前那样定义函数了只能定义匿名函数。匿名函数就是没有函数名的函数匿名函数的定义格式如下 func(参数)(返回值){函数体 }匿名函数因为没有函数名所以没办法像普通函数那样调用所以匿名函数需要保存到某个变量或者作为立即执行函数: func main() {// 将匿名函数保存到变量add : func(x, y int) {fmt.Println(x y)}add(10, 20) // 通过变量调用匿名函数//自执行函数匿名函数定义完加()直接执行func(x, y int) {fmt.Println(x y)}(10, 20) }匿名函数多用于实现回调函数和闭包。 闭包 闭包指的是一个函数和与其相关的引用环境组合而成的实体。简单来说闭包函数引用环境。 首先我们来看一个例子 func adder() func(int) int {var x intreturn func(y int) int {x yreturn x} } func main() {var f adder()fmt.Println(f(10)) //10fmt.Println(f(20)) //30fmt.Println(f(30)) //60f1 : adder()fmt.Println(f1(40)) //40fmt.Println(f1(50)) //90 }变量f是一个函数并且它引用了其外部作用域中的x变量此时f就是一个闭包。 在f的生命周期内变量x也一直有效。 闭包进阶示例1 func adder2(x int) func(int) int {return func(y int) int {x yreturn x} } func main() {var f adder2(10)fmt.Println(f(10)) //20fmt.Println(f(20)) //40fmt.Println(f(30)) //70f1 : adder2(20)fmt.Println(f1(40)) //60fmt.Println(f1(50)) //110 }闭包进阶示例2 func makeSuffixFunc(suffix string) func(string) string {return func(name string) string {if !strings.HasSuffix(name, suffix) {return name suffix}return name} }func main() {jpgFunc : makeSuffixFunc(.jpg)txtFunc : makeSuffixFunc(.txt)fmt.Println(jpgFunc(test)) //test.jpgfmt.Println(txtFunc(test)) //test.txt }闭包进阶示例3 func calc(base int) (func(int) int, func(int) int) {add : func(i int) int {base ireturn base}sub : func(i int) int {base - ireturn base}return add, sub }func main() {f1, f2 : calc(10)fmt.Println(f1(1), f2(2)) //11 9fmt.Println(f1(3), f2(4)) //12 8fmt.Println(f1(5), f2(6)) //13 7 }闭包其实并不复杂只要牢记闭包函数引用环境。 5.defer语句 Go语言中的defer语句会将其后面跟随的语句进行延迟处理。在defer归属的函数即将返回时将延迟处理的语句按defer定义的逆序进行执行也就是说先被defer的语句最后被执行最后被defer的语句最先被执行。 举个例子 func main() {fmt.Println(start)defer fmt.Println(1)defer fmt.Println(2)defer fmt.Println(3)fmt.Println(end) }输出结果 start end 3 2 1由于defer语句延迟调用的特性所以defer语句能非常方便的处理资源释放问题。比如资源清理、文件关闭、解锁及记录时间等。 defer执行时机 在Go语言的函数中return语句在底层并不是原子操作它分为给返回值赋值和RET指令两步。而defer语句执行的时机就在返回值赋值操作后RET指令执行前。具体如下图所示 defer经典案例 阅读下面的代码写出最后的打印结果。 func f1() int {x : 5defer func() {x}()return x }func f2() (x int) {defer func() {x}()return 5 }func f3() (y int) {x : 5defer func() {x}()return x } func f4() (x int) {defer func(x int) {x}(x)return 5 } func main() {fmt.Println(f1())fmt.Println(f2())fmt.Println(f3())fmt.Println(f4()) }参考文章 https://www.fansimao.com/1006299.html  https://www.fansimao.com/1006315.html
http://www.hkea.cn/news/14469878/

相关文章:

  • 怎么做网站界面分析wordpress支付方案解决
  • 学校门户网站建设报告帝国cms小说网站模板下载
  • 东莞网站推广运营公司名字大全三个字
  • 怎么创建自己的游戏网站企业查询
  • 网站开发有哪些风险校园网站建设结论
  • 网站网站建设公司上海柳州网站建设价格
  • 深圳营销型企业网站wordpress小说下载站
  • 怎么把网页放到网站上一个人免费观看在线高清国语
  • 舟山工程建设信息网站横琴高新区最新
  • 网站开发与规划wordpress seo不好
  • 燕窝网站怎么做的设置网络的网站
  • 青浦工厂网站建设cdq百度指数
  • 十堰h5网站建设百度推广费用可以退吗
  • 青岛福瀛建设集团有限公司网站网站建设原理
  • 南宁网站建设培训有哪些可信网站图片logo安装
  • 腾讯广告代理商重庆网站seo费用
  • 线上网站怎么做使用h5做的学习网站源码
  • 房天下网站建设国外品牌设计网站
  • 网站的建设方法包括什么问题网站建设模式有哪些内容
  • 甜品店网站开发背景做美食教程的网站有哪些
  • 做注册会计师网站专业建设 教学成果奖网站
  • 无锡网站制作有哪些搜狗seo软件
  • 佛山新网站建设方案WordPress电子书模板模板
  • 目前做那些网站致富修车店怎么做网站
  • 网站备案 历史摄影作品投稿网站
  • 天津建网站第三方平台广告营销是什么
  • 门户网站 模板之家怎么做网站前段
  • 网站建设流费用网上有多少个购物平台
  • 网站安全检测在线网站建设费属于服务类么
  • 网站页面模板页面布局如何备份wordpress网站