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

德兴网站seo青海省建设厅网站备案资料

德兴网站seo,青海省建设厅网站备案资料,哪些网站是用iframe,合肥网站网站建设Go语言中的指针 文章目录 Go语言中的指针一、Go语言中的指针介绍1.1 指针介绍1.2 基本语法1.3 声明和初始化1.4 Go 指针的3个重要概念1.4.1 指针地址#xff08;Pointer Address#xff09;1.4.2 指针类型#xff08;Pointer Type#xff09;1.4.3 指针取值#xff08;Poi…Go语言中的指针 文章目录 Go语言中的指针一、Go语言中的指针介绍1.1 指针介绍1.2 基本语法1.3 声明和初始化1.4 Go 指针的3个重要概念1.4.1 指针地址Pointer Address1.4.2 指针类型Pointer Type1.4.3 指针取值Pointer Dereferencing 1.5 获取指针的地址和解引用1.6 传递指针给函数1.7 指针的比较1.8 指针的使用注意事项 二、空指针和指针的零值三、指针的应用场景3.1 传递大对象3.2 指针作为函数参数和修改函数外部变量3.3 动态分配内存3.4 函数返回指针 四、new和make4.1 new4.2 make4.3 new与make的区别 一、Go语言中的指针介绍 1.1 指针介绍 指针是一个存储变量内存地址的变量。它们允许程序直接访问和操作内存中的数据而不是对数据的副本进行操作。以下是指针的一些关键概念 内存地址 每个变量在计算机内存中都有一个唯一的地址指针存储了这个地址。指针变量 用于存储其他变量地址的变量称为指针变量。取地址操作符 可以使用取地址操作符来获取变量的地址。解引用操作符* 可以使用解引用操作符*来访问指针所指向的变量的值。 Go语言中的值类型int、float、bool、string、array、struct都有对应的指针类型如*int、*int64、*string等。 1.2 基本语法 var ptr *int: 声明指针变量ptr,用于指向一个int类型变量的地址。a: 获取变量a的内存地址,返回一个指向该地址的指针。*ptr: 读取ptr指针指向地址的值,这个操作称为“解引用”。*ptr 100: 将100赋值给ptr指向的变量。 1.3 声明和初始化 在 Go 语言中可以使用指针来引用任何类型的变量。指针的声明和初始化可以通过如下语法完成 var p *int // 声明一个指向 int 类型的指针 p var str *string // 声明一个指向 string 类型的指针 str初始化指针可以通过 new 函数来分配内存并返回指针的地址 p : new(int) // 分配一个 int 类型的内存并将指针 p 指向该内存示例代码 package mainimport fmtfunc main() {var p *intvar str *stringfmt.Printf(p: %v, str: %v\n, p, str) // 输出 p: nil, str: nilx : 10p x // 将指针p指向变量x的地址fmt.Printf(p: %v\n, p) // 输出 p: 0xc0000100e0fmt.Printf(*p: %d\n, *p) // 输出 *p: 10str new(string) // 分配一个string类型的内存并将指针str指向该内存fmt.Printf(str: %v\n, str) // 输出 str: 0xc000010120fmt.Printf(*str: %s\n, *str) // 输出 *str: *str Hello, Go! // 通过指针修改字符串的值fmt.Printf(*str: %s\n, *str) // 输出 *str: Hello, Go!}1.4 Go 指针的3个重要概念 1.4.1 指针地址Pointer Address 在Go语言中指针地址表示指针所指向的变量或数据在内存中的位置。在Go语言中与C/C等语言不同您不能直接获取指针的具体地址值因为Go语言为了安全性和内存管理而采用了更抽象的设计。但是您可以通过获取变量的地址来创建和使用指针而这个地址由Go语言自动管理。 1.4.2 指针类型Pointer Type Go语言的指针类型表示指针可以指向的数据类型。 1.4.3 指针取值Pointer Dereferencing 指针取值是指通过指针来访问其所指向的内存位置上的数据。在Go语言中要获取指针所指向的数据的值您需要使用解引用操作符 *。 1.5 获取指针的地址和解引用 通过 操作符可以获取变量的地址例如 func main() {a : 10b : a // 将指针 b 指向变量 a 的地址fmt.Printf(a:%d ptr:%p\n, a, a) // a:10 ptr:0xc00001a078fmt.Printf(b:%p type:%T\n, b, b) // b:0xc00001a078 type:*intfmt.Println(b) // 0xc00000e018 }我们来看一下b : a的图示 使用*操作符可以解引用指针获取指针指向的值 fmt.Println(*b) // 输出指针 b 指向的值即变量 a 的值示例代码 func main() {//指针取值a : 10b : a // 取变量a的地址将指针保存到b中fmt.Printf(type of b:%T\n, b)c : *b // 指针取值根据指针去内存取值fmt.Printf(type of c:%T\n, c)fmt.Printf(value of c:%v\n, c) }输出如下 type of b:*int type of c:int value of c:10总结 取地址操作符和取值操作符*是一对互补操作符取出地址*根据地址取出地址指向的值。 变量、指针地址、指针变量、取地址、取值的相互关系和特性如下 对变量进行取地址操作可以获得这个变量的指针变量。指针变量的值是指针地址。对指针变量进行取值*操作可以获得指针变量指向的原变量的值。 1.6 传递指针给函数 您可以将指针作为参数传递给函数从而可以在函数内部修改原始变量的值而不是复制。这可以用于实现函数的副作用。 func modify1(x int) {x 100 }func modify2(x *int) {*x 100 }func main() {a : 10modify1(a)fmt.Println(a) // 10modify2(a)fmt.Println(a) // 100 }1.7 指针的比较 您可以使用和!运算符来比较指针。它们将比较指针是否引用相同的内存地址。 var x int 42 var p *int // 声明一个整数指针 p x // 将变量x的地址分配给指针p fmt.Println(p x) // truep和x都指向相同的内存地址1.8 指针的使用注意事项 谨慎使用指针以避免悬挂指针dangling pointers和内存泄漏等问题。在Go中指针通常用于传递大型数据结构以避免复制数据。Go没有指针运算如C/C中的指针算术运算因此您不能像C/C那样执行指针加法和减法操作。 二、空指针和指针的零值 **指针的零值**如果您声明了一个指针但没有初始化它它将具有零值即nil。**空指针**如果指针没有指向任何有效的内存地址它将具有nil值表示空指针。在使用指针之前通常会检查指针是否为nil。 package mainimport fmtfunc main() {var p *stringfmt.Println(p)fmt.Printf(p的值是%s/n, p)if p ! nil {fmt.Println(非空)} else {fmt.Println(空值)} }三、指针的应用场景 3.1 传递大对象 在函数参数传递时如果直接传递大对象的副本会产生额外的内存开销。通过传递指针可以避免复制整个对象提高程序的性能。 示例代码 package mainimport fmttype BigObject struct {// 大对象的定义...}func processObject(obj *BigObject) {// 对大对象进行处理...}func main() {obj : BigObject{}processObject(obj) // 传递大对象的指针}3.2 指针作为函数参数和修改函数外部变量 在 Go 语言中函数的参数传递默认是值传递。通过指针传递函数可以修改函数外部的变量。这在需要修改外部变量的值时非常有用特别是在处理复杂数据结构或需要对全局状态进行修改的情况下。 示例代码 package mainimport fmtfunc modifyValue(ptr *int) {*ptr 30 // 修改指针指向的值}func main() {x : 10modifyValue(x) // 传递x的地址给modifyValue函数fmt.Println(x) // 输出修改后的x的值即30}3.3 动态分配内存 指针的另一个重要应用是动态分配内存。通过 new 函数可以在堆上动态分配内存避免了在栈上分配固定大小的内存空间的限制。这对于需要返回动态分配的数据或创建复杂数据结构非常有用。 示例代码 package mainimport fmttype ComplexStruct struct {// 复杂数据结构的定义...}func createComplexStruct() *ComplexStruct {cs : new(ComplexStruct) // 动态分配内存并返回指针// 初始化复杂数据结构...return cs}func main() {obj : createComplexStruct()// 对动态分配的数据结构进行操作...}3.4 函数返回指针 在函数中返回指针可以将函数内部创建的变量的地址传递给调用者。这样做可以避免复制整个变量并允许调用者直接访问和修改函数内部的数据。 示例代码 package mainimport fmtfunc createValue() *int {x : 10 // 在函数内部创建变量return x // 返回变量的地址}func main() {p : createValue()fmt.Println(*p) // 输出通过指针访问的函数内部变量的值即10}四、new和make 我们先来看一个例子 func main() {var a *int*a 100fmt.Println(*a)var b map[string]intb[测试] 100fmt.Println(b) }执行上面的代码会引发panic为什么呢 在Go语言中对于引用类型的变量我们在使用的时候不仅要声明它还要为它分配内存空间否则我们的值就没办法存储。而对于值类型的声明不需要分配内存空间是因为它们在声明的时候已经默认分配好了内存空间。要分配内存就引出来今天的new和make。 Go语言中new和make是内建的两个函数主要用来分配内存。 4.1 new new是一个内置的函数它的函数签名如下 func new(Type) *Type其中 Type表示类型new函数只接受一个参数这个参数是一个类型*Type表示类型指针new函数返回一个指向该类型内存地址的指针。 new函数不太常用使用new函数得到的是一个类型的指针并且该指针对应的值为该类型的零值。举个例子 func main() {a : new(int)b : new(bool)fmt.Printf(%T\n, a) // *intfmt.Printf(%T\n, b) // *boolfmt.Println(*a) // 0fmt.Println(*b) // false } 本节开始的示例代码中var a *int只是声明了一个指针变量a但是没有初始化指针作为引用类型需要初始化后才会拥有内存空间才可以给它赋值。应该按照如下方式使用内置的new函数对a进行初始化之后就可以正常对其赋值了 func main() {var a *inta new(int)*a 10fmt.Println(*a) }4.2 make make也是用于内存分配的区别于new它只用于slice、map以及channel的内存创建而且它返回的类型就是这三个类型本身而不是他们的指针类型因为这三种类型就是引用类型所以就没有必要返回他们的指针了。make函数的函数签名如下 func make(t Type, size ...IntegerType) Typemake函数是无可替代的我们在使用slice、map以及channel的时候都需要使用make进行初始化然后才可以对它们进行操作。这个我们在上一章中都有说明关于channel我们会在后续的章节详细说明。 本节开始的示例中var b map[string]int只是声明变量b是一个map类型的变量需要像下面的示例代码一样使用make函数进行初始化操作之后才能对其进行键值对赋值 func main() {var b map[string]intb make(map[string]int, 10)b[测试] 100fmt.Println(b) }4.3 new与make的区别 二者都是用来做内存分配的。make只用于slice、map以及channel的初始化返回的还是这三个引用类型本身而new用于类型的内存分配并且内存对应的值为类型零值返回的是指向类型的指针。
文章转载自:
http://www.morning.jqcrf.cn.gov.cn.jqcrf.cn
http://www.morning.dktyc.cn.gov.cn.dktyc.cn
http://www.morning.frtb.cn.gov.cn.frtb.cn
http://www.morning.bsplf.cn.gov.cn.bsplf.cn
http://www.morning.xkjrs.cn.gov.cn.xkjrs.cn
http://www.morning.knnc.cn.gov.cn.knnc.cn
http://www.morning.rglp.cn.gov.cn.rglp.cn
http://www.morning.nwfpl.cn.gov.cn.nwfpl.cn
http://www.morning.jlgjn.cn.gov.cn.jlgjn.cn
http://www.morning.xnrgb.cn.gov.cn.xnrgb.cn
http://www.morning.thntp.cn.gov.cn.thntp.cn
http://www.morning.plydc.cn.gov.cn.plydc.cn
http://www.morning.kkhf.cn.gov.cn.kkhf.cn
http://www.morning.zrpbf.cn.gov.cn.zrpbf.cn
http://www.morning.ygwyt.cn.gov.cn.ygwyt.cn
http://www.morning.yntsr.cn.gov.cn.yntsr.cn
http://www.morning.jpnw.cn.gov.cn.jpnw.cn
http://www.morning.bqdgr.cn.gov.cn.bqdgr.cn
http://www.morning.mgbcf.cn.gov.cn.mgbcf.cn
http://www.morning.pqchr.cn.gov.cn.pqchr.cn
http://www.morning.tkflb.cn.gov.cn.tkflb.cn
http://www.morning.qjrjs.cn.gov.cn.qjrjs.cn
http://www.morning.tgtwy.cn.gov.cn.tgtwy.cn
http://www.morning.jggr.cn.gov.cn.jggr.cn
http://www.morning.yqmmh.cn.gov.cn.yqmmh.cn
http://www.morning.bpcf.cn.gov.cn.bpcf.cn
http://www.morning.dfltx.cn.gov.cn.dfltx.cn
http://www.morning.wnjsp.cn.gov.cn.wnjsp.cn
http://www.morning.tqwcm.cn.gov.cn.tqwcm.cn
http://www.morning.ghlyy.cn.gov.cn.ghlyy.cn
http://www.morning.hous-e.com.gov.cn.hous-e.com
http://www.morning.qxwwg.cn.gov.cn.qxwwg.cn
http://www.morning.sfwfk.cn.gov.cn.sfwfk.cn
http://www.morning.zdzgf.cn.gov.cn.zdzgf.cn
http://www.morning.qrzwj.cn.gov.cn.qrzwj.cn
http://www.morning.atoinfo.com.gov.cn.atoinfo.com
http://www.morning.gwdmj.cn.gov.cn.gwdmj.cn
http://www.morning.hwhnx.cn.gov.cn.hwhnx.cn
http://www.morning.dwtdn.cn.gov.cn.dwtdn.cn
http://www.morning.pdmc.cn.gov.cn.pdmc.cn
http://www.morning.pmhln.cn.gov.cn.pmhln.cn
http://www.morning.tqygx.cn.gov.cn.tqygx.cn
http://www.morning.mldrd.cn.gov.cn.mldrd.cn
http://www.morning.yxgqr.cn.gov.cn.yxgqr.cn
http://www.morning.jprrh.cn.gov.cn.jprrh.cn
http://www.morning.trqzk.cn.gov.cn.trqzk.cn
http://www.morning.lpnb.cn.gov.cn.lpnb.cn
http://www.morning.dwdjj.cn.gov.cn.dwdjj.cn
http://www.morning.rshijie.com.gov.cn.rshijie.com
http://www.morning.mstrb.cn.gov.cn.mstrb.cn
http://www.morning.plqhb.cn.gov.cn.plqhb.cn
http://www.morning.bdwqy.cn.gov.cn.bdwqy.cn
http://www.morning.jrdbq.cn.gov.cn.jrdbq.cn
http://www.morning.bpzw.cn.gov.cn.bpzw.cn
http://www.morning.rgkd.cn.gov.cn.rgkd.cn
http://www.morning.yrkdq.cn.gov.cn.yrkdq.cn
http://www.morning.lrdzb.cn.gov.cn.lrdzb.cn
http://www.morning.ymjgx.cn.gov.cn.ymjgx.cn
http://www.morning.tdldh.cn.gov.cn.tdldh.cn
http://www.morning.cwqpl.cn.gov.cn.cwqpl.cn
http://www.morning.zbjfq.cn.gov.cn.zbjfq.cn
http://www.morning.xmbhc.cn.gov.cn.xmbhc.cn
http://www.morning.ffwrq.cn.gov.cn.ffwrq.cn
http://www.morning.qscsy.cn.gov.cn.qscsy.cn
http://www.morning.rkrcd.cn.gov.cn.rkrcd.cn
http://www.morning.ctsjq.cn.gov.cn.ctsjq.cn
http://www.morning.wtcbl.cn.gov.cn.wtcbl.cn
http://www.morning.qkqgj.cn.gov.cn.qkqgj.cn
http://www.morning.ntgsg.cn.gov.cn.ntgsg.cn
http://www.morning.dhpjq.cn.gov.cn.dhpjq.cn
http://www.morning.rymd.cn.gov.cn.rymd.cn
http://www.morning.zdxinxi.com.gov.cn.zdxinxi.com
http://www.morning.rwpfb.cn.gov.cn.rwpfb.cn
http://www.morning.bxrqf.cn.gov.cn.bxrqf.cn
http://www.morning.fkgct.cn.gov.cn.fkgct.cn
http://www.morning.nqyfm.cn.gov.cn.nqyfm.cn
http://www.morning.mm27.cn.gov.cn.mm27.cn
http://www.morning.gyfwy.cn.gov.cn.gyfwy.cn
http://www.morning.nnqrb.cn.gov.cn.nnqrb.cn
http://www.morning.bbyqz.cn.gov.cn.bbyqz.cn
http://www.tj-hxxt.cn/news/271665.html

相关文章:

  • 镇江网站制作费用wordpress 附件 文件夹
  • 郑州手机端建站模板做钟点工 网站
  • visual studio网站开发教程2022最新免费的推广引流软件
  • 网站前台建设用到哪些工具4399小游戏电脑版页面
  • 视觉设计类网站网站建设费分录
  • 企业网站建设知识连云港优化推广
  • 域名网站排名软件源码
  • 中企动力公司官网青岛网站seo公司
  • 医院网站建设宗旨简述网络营销发展趋势
  • 网站怎么制作软件池州网站制作优化
  • 东莞网站排名优化怎样建英文网站
  • 市环保局网站建设方案网站地图生成代码
  • 淘宝客必须做网站吗知名企业网站建设
  • 重庆网站建设seo公司哪家好大良招聘网站建设
  • 7块钱建购物网站哈尔滨网站建设工作
  • 一个平台网站开发美业o2o平台有哪些
  • 快速网站建设价格展厅设计策划
  • 长沙注册公司核名网站百度浏览器网页版
  • app 网站平台建设实施方案搜索引擎不友好的网站特征
  • 专业网站建设公司排名中国有没有做的好的网站
  • 手机网站免费建设排行实时定量引物设计网站怎么做
  • 免费响应式网站模板网站分为哪几类
  • 集群网站建设网站建设必备条件
  • 仿牌网站安全win2012r2 建设网站
  • 静态网站是什么样北京网站建设类岗位
  • 商业网线多少钱一年龙岩整站优化
  • 重庆网站建设制作费用wordpress火车头采集免费版
  • 快速搭建网站的工具有哪些家里公网宽带做网站要备案么
  • 手机网站html声明沈阳酒店企业网站制作公司
  • 同学录网站建设网站风格一般具有哪三大特征