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

封装系统如何做自己的网站西部数码WordPress开启伪静态

封装系统如何做自己的网站,西部数码WordPress开启伪静态,公司网站 优帮云,网站建设外包公司招聘注#xff1a;本人已有C#xff0c;C,Python基础#xff0c;只写本人认为的重点。 这个知识点基本属于go的特性#xff0c;比较重要#xff0c;需要认真分析。 一、init函数 每个文件都可以定义init函数#xff0c;它会在main函数执行前被调用#xff0c;无论它的定义…注本人已有CC,Python基础只写本人认为的重点。 这个知识点基本属于go的特性比较重要需要认真分析。 一、init函数 每个文件都可以定义init函数它会在main函数执行前被调用无论它的定义位置是在main后还是前。而全局变量的优先级又高于init所以优先级是这样的全局变量initmain。示例如下 package mainimport fmtvar a test()func test() int {fmt.Println(test已执行)return 1 }func init() {fmt.Println(init已执行) }func main() {fmt.Println(main已执行) } 上述程序的输出是 test已执行 init已执行 main已执行当多个文件存在init时比如main所依赖的包中也有init结果会怎样呢假设main和依赖的包testutils内容如下 main package mainimport (fmtmod05/demo07/testutils )var a test()func test() int {fmt.Println(test已执行)return 1 }func init() {fmt.Println(main中的init已执行) }func main() {fmt.Println(main已执行)fmt.Println(age, testutils.Age, sex,testutils.Sex, name, testutils.Name) } testutils package testutilsimport fmtvar Age int var Sex string var Name stringfunc init() {fmt.Println(testutils中的init已执行)Age, Sex, Name 19, 女, 张三 } 则程序运行结果为 testutils中的init已执行 test已执行 main中的init已执行 main已执行 age 19 sex 女 name 张三显然导入的包先执行然后main中的test执行前先初始化全局变量再执行test最后执行init和main。所以顺序是utils的全局变量-utils的init-main文件的全局变量main文件的init-main文件的main函数。 总结下init的优先级文件之间被导包当前包文件内全局变量initmain。 二、匿名函数 相对于C和python的匿名函数go的匿名函数就简单很多了就是在函数定义前用一个变量接收示例如下 package mainimport fmtfunc main() {//定义匿名函数定义的同时调用result : func(num1 int, num2 int) int {return num1 num2}(10, 20)fmt.Println(result)//将匿名函数赋给一个变量这个变量实际就是函数类型的变量//sub等价于匿名函数sub : func(num1 int, num2 int) int {return num1 - num2}//直接调用sub就是调用这个匿名函数了result01 : sub(30, 70)fmt.Println(result01)result02 : sub(30, 70)fmt.Println(result02) } 需要注意的是匿名函数定义后如果不用括号那么这个变量就是匿名函数本身如果用括号就是调用一次匿名函数得到的是这个匿名函数的返回值这个要好好理解后面会有相关练习。 三、闭包closure 当函数返回一个匿名函数且该匿名函数使用了它之外的变量这个外部变量该匿名函数就组成了一个闭包closure闭包形成后该外部变量会一直留在内存中示例如下 package mainimport fmtfunc getSum() func(int) int {var sum int 0 // 闭包中使用的变量return func(num int) int { // 函数中返回一个匿名函数sum sum num // 引用外部变量sumreturn sum}//返回的匿名函数匿名函数以外的变量sum形成了闭包 }func main() {f : getSum()// 调用闭包fmt.Println(f(1)) //1fmt.Println(f(2)) //3fmt.Println(f(3)) //6fmt.Println(f(4)) //10// 这里变量 sum 仍然存活因为闭包仍然在使用它// 让闭包的引用消失f nil // 现在没有任何引用指向 sum// 之后如果没有其他地方引用 sum它将被垃圾回收fmt.Println(----------------------)fmt.Println(getSum01(0, 1)) //1fmt.Println(getSum01(1, 2)) //3fmt.Println(getSum01(3, 3)) //6fmt.Println(getSum01(6, 4)) //10 }//不使用闭包的时候我想保留的值不可以反复使用 //闭包应用场景闭包可以保留上次引用的某个值我们传入一次就可以反复使用了 func getSum01(sum int, num int) int {sum sum numreturn sum } 闭包进阶匿名函数的闭包 练习1分析以下几段代码它们的输出分别是如果是地址就答地址即可 代码1 func main() {counter : func() func() int {count : 0return func() int {countreturn count}}()fmt.Println(counter())fmt.Println(counter())fmt.Println(counter()) }代码2 func main() {counter : func() func() int {count : 0return func() int {countreturn count}}fmt.Println(counter())fmt.Println(counter())fmt.Println(counter()) }代码3 func main() {counter : func() func() int {count : 0return func() int {countreturn count}}fmt.Println(counter()())fmt.Println(counter()())fmt.Println(counter()()) }这个分析起来还是有一定难度的留到文末讲读者可先思考一会儿。 四、defer关键字 defer是go的一个关键字用于推迟执行函数或函数调用语句直到外层函数返回后再执行这个函数或函数调用语句。具体来说就是将当前函数或函数调用语句压入一个栈中等外层函数执行完后再按栈的顺序后进先出数据结构的内容取出栈顶元素。注意压入栈中时函数或调用语句中的变量的值也会一起保存属于值传递示例如下 package mainimport fmtfunc main() {res : func(num1 int, num2 int) int {defer fmt.Println(num1, num1)defer fmt.Println(num2, num2)num1 90num2 50return num1 num2}(30, 60)fmt.Println(sum, res) } 显然num1和num2的值在函数体开头就被保存到栈中了所以程序输出如下 num2 60 num1 30 sum 230OK我们再来看前面的练习其关键在于匿名闭包 counter : func() func() int {count : 0return func() int {countreturn count} }()首先不用管返回值具体是什么你得先搞清楚匿名函数的概念之前说过无括号返回的就是匿名函数本身有括号就是匿名函数返回值。所以代码2和3就能做出来了代码2调用了三次匿名函数由于返回的是闭包所以得到的是函数闭包的本质就是匿名函数将打印三次函数的地址引用。由于每次是重新调用匿名函数所以是也就是刷新了三次闭包得到了三个一样的闭包地址。代码3的counter也是函数但调用语句多了括号所以每次是重新调用匿名函数并调用闭包所以是得到了三个一样的闭包的返回值即三个1。理解了这两个代码1就好理解了有括号说明得到的是闭包匿名函数就调用了这一次所以之后操作的都是同一个闭包并不会刷新。而闭包中的外部变量是一直存在的所以结果是1 2 3。 到这里如果你能完全理解说明你对闭包和匿名函数的掌握到位了。这题呢其实是本人和ChatGPT共同制作的一个题因为我在问它闭包知识的时候它给我的是代码1然后我就在这基础上改了下并加以思考。这说明学习要多举一反三多扩展一些情况那么你对这个知识点的理解就比别人更深这也是提高学习效率的方式之一因为如果理解太浅到后面就得补来补去会浪费不少时间。
http://www.w-s-a.com/news/890772/

相关文章:

  • 网站建设商标属于哪个类别搜狗seo快速排名公司
  • 织梦做商城网站企业网络建站
  • 网站后期维护都有什么wordpress首页加图片
  • 展会网站怎么做网页设计与制作教程版徐洪亮课后答案
  • 石景山网站建设设计公司建设网站怎么建立服务器
  • 本地生活服务平台app网站关键词优化原理
  • 建网站的公司叫什么重庆论坛建站模板
  • 湖北网站制作公司银川网站建设哪家不错
  • 网站后台演示地址服装网站建设公司推荐
  • 湖北钟祥建设局网站旅游哪个网站最好
  • 浙江建设工程信息网站辽宁建设工程信息网场内业绩什么意思
  • 郑州做网站公司 汉狮网络专业图片搜集网站怎么做
  • 网站托管是什么品牌推广营销平台
  • 制作网站的难度贵州省兴义市建设局网站
  • 永春建设局网站室内设计师培训班学费多少
  • 做仿站如何获取网站源码windows2012做网站
  • 网站建设最好的公司东莞外贸网站
  • 普兰店网站建设一般做网站什么价格
  • 网站建设的发展目标甘肃网站设计公司
  • 常州西站建设规划室内装修设计学校哪里好
  • 大连网站制作选择ls15227如何编辑网站
  • 网站发稿平台迪士尼网站是谁做的
  • 常州有哪些好的网站建设案例wordpress 360 插件
  • 模板网站有后台么柳城网站建设
  • 地方门户网站制作一级做c爱片的网站
  • 自己上传图片做动漫图网站北京福田汽车
  • 一级a做爰片免费网站录像ps做网站图片水印
  • 网页广告投放成都优化推广公司
  • 网站开发 印花税网页制作站点
  • 创建个人网站有什么好处国外建站系统