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

怎么做网站规划做的比较好的分享网站

怎么做网站规划,做的比较好的分享网站,手机微网站怎么制作,聊城开发区建设局网站#x1f337; 博主 libin9iOak带您 Go to Golang Language.✨ #x1f984; 个人主页——libin9iOak的博客#x1f390; #x1f433; 《面试题大全》 文章图文并茂#x1f995;生动形象#x1f996;简单易学#xff01;欢迎大家来踩踩~#x1f33a; #x1f30a; 《I… 博主 libin9iOak带您 Go to Golang Language.✨ 个人主页——libin9iOak的博客 《面试题大全》 文章图文并茂生动形象简单易学欢迎大家来踩踩~ 《IDEA开发秘籍》学会IDEA常用操作工作效率翻倍~ 希望本文能够给您带来一定的帮助文章粗浅敬请批评指正 100天精通Golang基础入门篇 100天精通Golang基础入门篇——第17天深入解析Go语言中的指针摘要:引言:前言: 一、指针1.1 指针的概念1.2 获取变量的地址1.3 声明指针1.4 空指针1.5 获取指针的值1.6 操作指针改变变量的数值1.7 使用指针传递函数的参数1.8 指针的指针 演示代码案例1:运行截图:运行结果: 演示代码案例2:运行截图:运行结果: 演示代码案例3:运行截图:运行结果: 演示代码案例4:运行截图:运行结果: 今日学习总结:参考文献: 结语 100天精通Golang基础入门篇——第17天深入解析Go语言中的指针 摘要: 本篇文章主要深入解析Go语言中的指针从指针的概念、获取变量地址声明指针空指针获取指针的值操作指针改变变量的数值使用指针传递函数的参数以及指针的指针等方面进行讲解和示例演示。 引言: 指针是Go语言中一种重要的概念它提供了直接访问内存地址的能力使得我们可以更灵活地操作数据和进行内存管理。在本篇文章中我们将深入探讨指针的各个方面并通过实际的代码案例来加深对指针的理解和应用。 前言: 在Go语言中变量在内存中存储而指针则指向这些内存地址。通过指针我们可以通过内存地址直接访问和修改变量的值这为Go语言提供了更高的性能和灵活性。本篇文章将带领读者逐步了解指针的概念和用法帮助读者在日常的Go编程中更加熟练地使用指针。 一、指针 1.1 指针的概念 指针是存储另一个变量的内存地址的变量。 我们都知道变量是一种使用方便的占位符用于引用计算机内存地址。 一个指针变量可以指向任何一个值的内存地址它指向那个值的内存地址。 在上面的图中变量b的值为156存储在内存地址0x1040a124。变量a持有b的地址现在a被认为指向b。 1.2 获取变量的地址 Go 语言的取地址符是 放到一个变量前使用就会返回相应变量的内存地址。 package mainimport fmtfunc main() {var a int 10 fmt.Printf(变量的地址: %x\n, a ) }运行结果 变量的地址: 20818a2201.3 声明指针 声明指针*T是指针变量的类型它指向T类型的值。 var var_name *var-typevar-type 为指针类型var_name 为指针变量名* 号用于指定变量是作为一个指针。 var ip *int /* 指向整型*/ var fp *float32 /* 指向浮点型 */示例代码 package mainimport fmtfunc main() {var a int 20 /* 声明实际变量 */var ip *int /* 声明指针变量 */ip a /* 指针变量的存储地址 */fmt.Printf(a 变量的地址是: %x\n, a )/* 指针变量的存储地址 */fmt.Printf(ip 变量的存储地址: %x\n, ip )/* 使用指针访问值 */fmt.Printf(*ip 变量的值: %d\n, *ip ) }运行结果 a 变量的地址是: 20818a220 ip 变量的存储地址: 20818a220 *ip 变量的值: 20示例代码 package mainimport fmttype name int8 type first struct {a intb boolname }func main() {a : new(first)a.a 1a.name 11fmt.Println(a.b, a.a, a.name) }运行结果 false 1 11未初始化的变量自动赋上初始值 package mainimport fmttype name int8 type first struct {a intb boolname }func main() {var a first{1, false, 2}var b *first afmt.Println(a.b, a.a, a.name, a, b.a, b, (*b).a) }运行结果 false 1 2 {1 false 2} 1 0xc042068018 1获取指针地址在指针变量前加的方式 1.4 空指针 Go 空指针 当一个指针被定义后没有分配到任何变量时它的值为 nil。 nil 指针也称为空指针。 nil在概念上和其它语言的null、None、nil、NULL一样都指代零值或空值。 一个指针变量通常缩写为 ptr。 空指针判断 if(ptr ! nil) /* ptr 不是空指针 */ if(ptr nil) /* ptr 是空指针 */1.5 获取指针的值 获取一个指针意味着访问指针指向的变量的值。语法是*a 示例代码 package main import ( fmt )func main() { b : 255a : bfmt.Println(address of b is, a)fmt.Println(value of b is, *a) }1.6 操作指针改变变量的数值 示例代码 package mainimport ( fmt )func main() { b : 255a : bfmt.Println(address of b is, a)fmt.Println(value of b is, *a)*afmt.Println(new value of b is, b) }运行结果 address of b is 0x1040a124 value of b is 255 new value of b is 256 1.7 使用指针传递函数的参数 示例代码 package mainimport ( fmt )func change(val *int) { *val 55 } func main() { a : 58fmt.Println(value of a before function call is,a)b : achange(b)fmt.Println(value of a after function call is, a) }运行结果 value of a before function call is 58 value of a after function call is 55 不要将一个指向数组的指针传递给函数。使用切片。 假设我们想对函数内的数组进行一些修改并且对调用者可以看到函数内的数组所做的更改。一种方法是将一个指向数组的指针传递给函数。 package mainimport ( fmt )func modify(arr *[3]int) { (*arr)[0] 90 }func main() { a : [3]int{89, 90, 91}modify(a)fmt.Println(a) }运行结果 [90 90 91]示例代码 package mainimport ( fmt )func modify(arr *[3]int) { arr[0] 90 }func main() { a : [3]int{89, 90, 91}modify(a)fmt.Println(a) }运行结果 [90 90 91]虽然将指针传递给一个数组作为函数的参数并对其进行修改但这并不是实现这一目标的惯用方法。我们有切片。 示例代码 package mainimport ( fmt )func modify(sls []int) { sls[0] 90 }func main() { a : [3]int{89, 90, 91}modify(a[:])fmt.Println(a) }运行结果 [90 90 91]Go不支持指针算法。 package main func main() { b : […]int{109, 110, 111} p : b p } nvalid operation: p (non-numeric type *[3]int) 指针数组 package mainimport fmtconst MAX int 3func main() {a : []int{10,100,200}var i intfor i 0; i MAX; i {fmt.Printf(a[%d] %d\n, i, a[i] )} }结果 a[0] 10 a[1] 100 a[2] 200有一种情况我们可能需要保存数组这样我们就需要使用到指针。 package mainimport fmtconst MAX int 3func main() {a : []int{10,100,200}var i intvar ptr [MAX]*int;for i 0; i MAX; i {ptr[i] a[i] /* 整数地址赋值给指针数组 */}for i 0; i MAX; i {fmt.Printf(a[%d] %d\n, i,*ptr[i] )} }结果 a[0] 10 a[1] 100 a[2] 2001.8 指针的指针 指针的指针 如果一个指针变量存放的又是另一个指针变量的地址则称这个指针变量为指向指针的指针变量。 var ptr **int;package mainimport fmtfunc main() {var a intvar ptr *intvar pptr **inta 3000/* 指针 ptr 地址 */ptr a/* 指向指针 ptr 地址 */pptr ptr/* 获取 pptr 的值 */fmt.Printf(变量 a %d\n, a )fmt.Printf(指针变量 *ptr %d\n, *ptr )fmt.Printf(指向指针的指针变量 **pptr %d\n, **pptr) }结果 变量 a 3000 指针变量 *ptr 3000 指向指针的指针变量 **pptr 3000指针作为函数参数 package mainimport fmtfunc main() {/* 定义局部变量 */var a int 100var b int 200fmt.Printf(交换前 a 的值 : %d\n, a )fmt.Printf(交换前 b 的值 : %d\n, b )/* 调用函数用于交换值* a 指向 a 变量的地址* b 指向 b 变量的地址*/swap(a, b);fmt.Printf(交换后 a 的值 : %d\n, a )fmt.Printf(交换后 b 的值 : %d\n, b ) }func swap(x *int, y *int) {var temp inttemp *x /* 保存 x 地址的值 */*x *y /* 将 y 赋值给 x */*y temp /* 将 temp 赋值给 y */ }结果 交换前 a 的值 : 100 交换前 b 的值 : 200 交换后 a 的值 : 200 交换后 b 的值 : 100演示代码案例1: package mainimport fmtfunc main() {/*指针pointer存储了另一个变量的内存地址的变量。*///1.定义一个int类型的变量a : 10fmt.Println(a的数值是,a) //10fmt.Printf(%T\n,a) //intfmt.Printf(a的地址是%p\n,a) //0xc00008a008//2.创建一个指针变量用于存储变量a的地址var p1 *intfmt.Println(p1) //nil空指针p1 a //p1指向了a的内存地址fmt.Println(p1的数值,p1) //p1中存储的是a的地址fmt.Printf(p1自己的地址%p\n,p1)fmt.Println(p1的数值是a的地址该地址存储的数据,*p1)//获取指针指向的变量的数值//3.操作变量更改数值 并不会改变地址a 100fmt.Println(a)fmt.Printf(%p\n,a)//4.通过指针改变变量的数值*p1 200fmt.Println(a)//5.指针的指针var p2 **intfmt.Println(p2)p2 p1fmt.Printf(%T,%T,%T\n,a,p1,p2) //int, *int, **intfmt.Println(p2的数值,p2) //p1的地址fmt.Printf(p2自己的地址%p\n,p2)fmt.Println(p2中存储的地址对应的数值就是p1的地址对应的数据,*p2)fmt.Println(p2中存储的地址对应的数值再获取对应的数值,**p2)}运行截图: 运行结果: GOROOTD:\Go #gosetup GOPATHC:\Users\DELL\go #gosetup D:\Go\bin\go.exe build -o C:\Users\DELL\AppData\Local\JetBrains\GoLand2023.1\tmp\GoLand\___go_build_Day17_Pointer.exe D:\GolandProjects\Day17-Pointer\demo01_pointer.go #gosetup C:\Users\DELL\AppData\Local\JetBrains\GoLand2023.1\tmp\GoLand\___go_build_Day17_Pointer.exe a的数值是 10 int a的地址是0xc0000a6058 nil p1的数值 0xc0000a6058 p1自己的地址0xc0000ca020 p1的数值是a的地址该地址存储的数据 10 100 0xc0000a6058 200 nil int,*int,**int p2的数值 0xc0000ca020 p2自己的地址0xc0000ca028 p2中存储的地址对应的数值就是p1的地址对应的数据 0xc0000a6058 p2中存储的地址对应的数值再获取对应的数值 200进程 已完成退出代码为 0 演示代码案例2: package mainimport fmtfunc main() {/*数组指针首先是一个指针一个数组的地址。*[4]Type指针数组首先是一个数组存储的数据类型是指针[4]*Type*[5]float64,指针一个存储了5个浮点类型数据的数组的指针*[3]string指针数组的指针存储了3个字符串[3]*string数组存储了3个字符串的指针地址的数组[5]*float64数组存储了5个浮点数据的地址的数组*[5]*float64指针一个数组的指针存储了5个float类型的数据的指针地址的数组的指针*[3]*string指针存储了3个字符串的指针地址的数组的指针**[4]string指针存储了4个字符串数据的数组的指针的指针**[4]*string指针存储了4个字符串的指针地址的数组的指针的指针*///1.创建一个普通的数组arr1 :[4]int{1,2,3,4}fmt.Println(arr1)//2.创建一个指针存储该数组的地址---数组指针var p1 *[4]intp1 arr1fmt.Println(p1) //[1 2 3 4]fmt.Printf(%p\n,p1) //数组arr1的地址fmt.Printf(%p\n,p1) //p1指针自己的地址//3.根据数组指针操作数组(*p1)[0] 100fmt.Println(arr1)p1[0] 200 //简化写法fmt.Println(arr1)//4.指针数组a : 1b : 2c : 3d : 4arr2 :[4]int{a,b,c,d}arr3 :[4]*int{a,b,c,d}fmt.Println(arr2) //[1 2 3 4]fmt.Println(arr3)arr2[0] 100fmt.Println(arr2)fmt.Println(a)*arr3[0] 200fmt.Println(arr3)fmt.Println(a)b 1000fmt.Println(arr2)fmt.Println(arr3)for i:0;ilen(arr3);i{fmt.Println(*arr3[i])} } 运行截图: 运行结果: GOROOTD:\Go #gosetup GOPATHC:\Users\DELL\go #gosetup D:\Go\bin\go.exe build -o C:\Users\DELL\AppData\Local\JetBrains\GoLand2023.1\tmp\GoLand\___go_build_Day17_Pointer__1_.exe D:\GolandProjects\Day17-Pointer\demo02_pointerarray.go #gosetup C:\Users\DELL\AppData\Local\JetBrains\GoLand2023.1\tmp\GoLand\___go_build_Day17_Pointer__1_.exe [1 2 3 4] [1 2 3 4] 0xc000012160 0xc00000a030 [100 2 3 4] [200 2 3 4] [1 2 3 4] [0xc00001e100 0xc00001e108 0xc00001e110 0xc00001e118] [100 2 3 4] 1 [0xc00001e100 0xc00001e108 0xc00001e110 0xc00001e118] 200 [100 2 3 4] [0xc00001e100 0xc00001e108 0xc00001e110 0xc00001e118] 200 1000 3 4进程 已完成退出代码为 0 演示代码案例3: package mainimport fmtfunc main() {/*函数指针一个指针指向了一个函数的指针。因为go语言中function默认看作一个指针没有*。slice,map,function指针函数一个函数该函数的返回值是一个指针。*/var a func()a fun1a()arr1 : fun2()fmt.Printf(arr1的类型%T地址%p数值%v\n, arr1, arr1, arr1)arr2 : fun3()fmt.Printf(arr2的类型%T地址%p数值%v\n, arr2, arr2, arr2)fmt.Printf(arr2指针中存储的数组的地址%p\n, arr2) } func fun3() *[4]int {arr : [4]int{5, 6, 7, 8}fmt.Printf(函数中arr的地址%p\n, arr)return arr }func fun2() [4]int { //普通函数arr : [4]int{1, 2, 3, 4}return arr }func fun1() {fmt.Println(fun1().....) } 运行截图: 运行结果: GOROOTD:\Go #gosetup GOPATHC:\Users\DELL\go #gosetup D:\Go\bin\go.exe build -o C:\Users\DELL\AppData\Local\JetBrains\GoLand2023.1\tmp\GoLand\___go_build_Day17_Pointer__2_.exe D:\GolandProjects\Day17-Pointer\demo03_pointerfunc.go #gosetup C:\Users\DELL\AppData\Local\JetBrains\GoLand2023.1\tmp\GoLand\___go_build_Day17_Pointer__2_.exe fun1()..... arr1的类型[4]int地址0xc0000d2020数值[1 2 3 4] 函数中arr的地址0xc0000d20a0 arr2的类型*[4]int地址0xc0000ca020数值[5 6 7 8] arr2指针中存储的数组的地址0xc0000d20a0进程 已完成退出代码为 0 演示代码案例4: package mainimport fmtfunc main() {/*指针作为参数参数的传递值传递引用传递*/a : 10fmt.Println(fun1()函数调用前a:, a)fun1(a)fmt.Println(fun1()函数调用后a, a)fun2(a)fmt.Println(fun2()函数调用后a:, a)arr1 : [4]int{1, 2, 3, 4}fmt.Println(fun3()函数调用前, arr1)fun3(arr1)fmt.Println(fun3()函数调用后, arr1)fun4(arr1)fmt.Println(fun4()函数调用后, arr1)//s1 : []int{1, 2, 3, 4, 5} } func fun4(p2 *[4]int) { // 引用传递fmt.Println(fun4()函数中的数组指针, p2)p2[0] 200fmt.Println(fun4()函数中的数组指针, p2) }func fun3(arr2 [4]int) { // 值传递fmt.Println(fun3()函数中数组的, arr2)arr2[0] 100fmt.Println(fun3()函数中修改数组, arr2) }func fun1(num int) { // 值传递num a 10fmt.Println(fun1()函数中num的值, num)num 100fmt.Println(fun1()函数中修改num, num) }func fun2(p1 *int) { //传递的是a的地址就是引用传递fmt.Println(fun2()函数中p1, *p1)*p1 200fmt.Println(fun2()函数中修改p1, *p1) } 运行截图: 运行结果: GOROOTD:\Go #gosetup GOPATHC:\Users\DELL\go #gosetup D:\Go\bin\go.exe build -o C:\Users\DELL\AppData\Local\JetBrains\GoLand2023.1\tmp\GoLand\___go_build_Day17_Pointer__3_.exe D:\GolandProjects\Day17-Pointer\demo04_pointerparamter.go #gosetup C:\Users\DELL\AppData\Local\JetBrains\GoLand2023.1\tmp\GoLand\___go_build_Day17_Pointer__3_.exe fun1()函数调用前a: 10 fun1()函数中num的值 10 fun1()函数中修改num 100 fun1()函数调用后a 10 fun2()函数中p1 10 fun2()函数中修改p1 200 fun2()函数调用后a: 200 fun3()函数调用前 [1 2 3 4] fun3()函数中数组的 [1 2 3 4] fun3()函数中修改数组 [100 2 3 4] fun3()函数调用后 [1 2 3 4] fun4()函数中的数组指针 [1 2 3 4] fun4()函数中的数组指针 [200 2 3 4] fun4()函数调用后 [200 2 3 4]进程 已完成退出代码为 0 今日学习总结: 在本篇学习中我们深入学习了Go语言中指针的概念和用法。我们了解了指针的基本概念如何获取变量的地址和声明指针。我们还学习了空指针的概念以及如何获取指针的值。进一步地我们了解了如何通过指针来改变变量的数值以及在函数参数传递中如何使用指针。最后我们还了解了指针的指针这在某些特定情况下非常有用。通过多个演示代码案例我们加深了对这些概念的理解并通过运行截图和结果展示了指针的实际应用场景。掌握了这些知识后相信读者在Go语言编程中会更加游刃有余。 参考文献: Donovan, A., Kernighan, B. W. (2015). The Go Programming Language. Addison-Wesley Professional. 该书由Go语言的创始人之一Alan A. A. Donovan和Brian W. Kernighan合著对Go语言的指针及其他重要概念进行了全面介绍是学习Go语言的经典教材之一。 温航, 张煜皓, 张淼. (2019). Go语言学习笔记. 电子工业出版社. 这本书是一本适合初学者的Go语言入门教材其中包含了关于指针的基础知识和实例讲解。 Pike, R., Thompson, K. (2020). The Go Memory Model. arXiv preprint arXiv:2003.11757. 该文献探讨了Go语言的内存模型涉及到指针的使用和内存管理相关的内容适合对Go语言底层原理感兴趣的读者。 Young, M. (2016). The Little Go Book. The Little Go Book. 这是一本小型的Go语言入门书籍其中有关于指针的简洁介绍和示例。 A Tour of Go - Pointers. (官方教程) Go语言官方教程中有关于指针的章节提供了指针的基本概念和使用方法可作为初学者入门指针的参考资料。 结语 今天已学习 通过今天的学习您已经踏上了Golang的学习之旅。在未来的日子里您将探索Golang的各个方面从基础概念到高级技巧从实际应用到性能优化。 学习一门编程语言是一个持续的过程每一天都是您向Golang的精通迈进的重要一步。我鼓励您坚持每天学习保持热情和好奇心解决挑战并享受成功的喜悦。 在您的学习旅程中不要忘记参与社区和与其他Golang开发者交流。分享您的见解和经验向他人学习并在开源项目或实际应用中展示您的技能。 如果您在学习过程中遇到困难或有任何问题不要犹豫向社区和专家寻求帮助。持续学习勇敢探索您将在Golang领域取得令人瞩目的成就。 最后感谢您的阅读和支持祝愿您在未来的每一天中都能够成为一名精通Golang的开发者 期待听到您在学习过程中的进展和成就。如果您需要进一步的帮助请随时告诉我。祝您在学习Golang的旅程中取得巨大成功 点击下方名片加入IT技术核心学习团队。一起探索科技的未来共同成长。 如果您在学习过程中有任何疑惑请点击下方名片带您一对一快速入门 Go语言 的世界 ~
http://www.w-s-a.com/news/311327/

相关文章:

  • 深圳网站建设zvge山西省煤炭基本建设局网站
  • 佛山网页网站设计线上怎么做推广和宣传
  • 多个域名绑定同一个网站案例
  • 建设网站都需要准备什么代理加盟微信网站建设
  • 网站备案没有了wordpress 添加按钮
  • 湖南建设银行宣传部网站福田蒙派克空调滤芯安装位置图
  • wap网站搜索wordpress工作室模板
  • 青岛金融网站建设如何提交网站地图
  • 制作简单门户网站步骤网站建设论文的摘要
  • 可以直接进入网站的正能量照片学做静态网站
  • 织梦做社交网站合适吗网站的市场如何制作
  • 阳曲网站建设价格多少四川佳和建设工程网站
  • 免费注册店铺位置sem seo什么意思
  • 建筑网站搜图电子商务网站建设渠道
  • 学校网站内容四川手机网站开发
  • 网站制作公司违法商业网站运营成本
  • 显示佣金的网站是怎么做的广告设计主要做哪些
  • 做阿里网站的分录济南seo网站排名关键词优化
  • 北京建设银行纪念钞预定官方网站wordpress中文优化版
  • 宝安做棋牌网站建设找哪家效益快创意设计师个人网站
  • 做线上网站需要多少钱系统开发板价格
  • 建筑企业登录哪个网站wordpress feed地址
  • 网站建设流程百科提升seo搜索排名
  • 杭州网站建设 巴零做销售怎么和客户聊天
  • 北京自己怎样做网站wordpress oauth2插件
  • 上海800做网站wordpress建站的好处
  • 婚纱摄影网站设计模板如何做好网站内容
  • cdn网站加速招商计划书模板ppt
  • 我在某网站网站做代理开发小程序外包
  • 设计网站国外商城网站的建设费用