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

网站推广资讯网站开发营业执照申请

网站推广资讯,网站开发营业执照申请,wordpress教程lnmp,网站开发代码用什么软件目录 1. 指针的基础1.1 什么是指针#xff1f;1.2 内存地址与值的地址1.2.1 内存中的数据存储1.2.2 如何理解值的地址 2. Go中的指针操作2.1 指针类型和值2.1.1 基本数据类型的指针2.1.2 复合数据类型的指针 2.2 如何获取一个指针值2.3 指针#xff08;地址#xff09;解引用… 目录 1. 指针的基础1.1 什么是指针1.2 内存地址与值的地址1.2.1 内存中的数据存储1.2.2 如何理解值的地址 2. Go中的指针操作2.1 指针类型和值2.1.1 基本数据类型的指针2.1.2 复合数据类型的指针 2.2 如何获取一个指针值2.3 指针地址解引用 3. 深入理解指针3.1 我们为什么需要指针3.1.1 提高程序性能3.1.2 动态数据结构3.1.3 与其他语言的比较 3.2 关于引用这个术语3.2.1 引用与指针的区别 4. Go指针的特性与限制4.1 Go指针的特性4.1.1 零值4.1.2 不支持指针算术 4.2 Go指针的限制4.2.1 不支持指针到整数的转换4.2.2 不能获取内建数据类型的地址4.2.3 安全性 5. 总结 Go指针为程序员提供了对内存的深入管理能力同时确保了代码的安全性。本文深入探讨了Go指针的基础概念、操作、深层理解及其特性与限制。通过深入了解其设计哲学和应用我们可以更好地利用Go的强大功能。 关注TechLead分享互联网架构、云服务技术的全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验同济本复旦硕复旦机器人智能实验室成员阿里云认证的资深架构师项目管理专业人士上亿营收AI产品研发负责人。 1. 指针的基础 1.1 什么是指针 指针是一种变量其存储的是另一个变量的内存地址而不是值本身。在很多编程语言中当我们需要直接访问内存或者希望通过一个变量间接操作另一个变量时会使用到指针。 示例 var a int 42 var p *int a fmt.Println(p) // 打印变量a的内存地址1.2 内存地址与值的地址 每一个变量都存储在内存中的一个位置上这个位置被称为该变量的内存地址。而当我们谈论一个变量的地址时我们实际上是在讨论这个内存地址。 1.2.1 内存中的数据存储 计算机的内存是按照字节bytes组织的每个字节都有一个唯一的地址。一个变量占用的字节数取决于其类型例如一个 int 类型在64位系统上通常是8字节。 示例 var x int64 123456789 fmt.Println(x) // 打印变量x的内存地址1.2.2 如何理解值的地址 当我们使用操作符来获取一个变量的地址时我们实际上获取的是指向该变量内存起始位置的指针。 示例 var y string OpenAI fmt.Println(y) // 打印变量y的内存地址在上面的示例中变量y存储了字符串OpenAI但y给我们返回的是这个字符串存储在内存中的地址。 2. Go中的指针操作 2.1 指针类型和值 在Go中每种数据类型都有与之关联的指针类型。指针类型的定义是前置一个*到原始数据类型前面。例如int的指针类型是*int。 2.1.1 基本数据类型的指针 示例 var age int 30 var agePointer *int agefmt.Println(age) // 打印原始变量值30 fmt.Println(agePointer) // 打印age变量的内存地址2.1.2 复合数据类型的指针 Go中的复合数据类型例如slices、maps、channels、arrays、structs也有其对应的指针类型。 示例 type Person struct {Name stringAge int }var person Person Person{Alice, 28} var personPointer *Person personfmt.Println(person) // 打印结构体值{Alice 28} fmt.Println(personPointer) // 打印结构体的内存地址2.2 如何获取一个指针值 要获取一个变量的指针值可以使用操作符。 示例 var fruit string apple pointerToFruit : fruitfmt.Println(fruit) // 打印原始值apple fmt.Println(pointerToFruit) // 打印fruit的内存地址2.3 指针地址解引用 要获取指针指向的原始值我们使用*操作符进行解引用。这允许我们间接地访问和修改指针指向的值。 示例 var number int 100 pointerToNumber : numberfmt.Println(*pointerToNumber) // 通过解引用获取原始值100// 修改指针指向的值 *pointerToNumber 200 fmt.Println(number) // 原始变量值被修改为2003. 深入理解指针 3.1 我们为什么需要指针 指针在编程中是一个重要的工具特别是在需要高性能、灵活性或者对内存使用有严格要求的场景中。 3.1.1 提高程序性能 指针可以减少数据复制的需要从而提高程序的执行速度。 示例 考虑一个场景我们需要交换两个大的数据结构的值。 type LargeStruct struct {Data [1000]int }func swapWithoutPointer(a, b LargeStruct) {a, b b, a }func swapWithPointer(a, b *LargeStruct) {*a, *b *b, *a }var x, y LargeStruct // 使用指针交换 swapWithPointer(x, y)在上面的例子中使用指针的方法可以避免复制两次大的数据结构从而更为高效。 3.1.2 动态数据结构 很多动态数据结构如链表、树、图都依赖于指针来实现。 示例 type Node struct {Value intNext *Node }// 创建链表 first : Node{Value: 1} second : Node{Value: 2} third : Node{Value: 3}first.Next second second.Next thirdfmt.Println(first.Value) // 1 fmt.Println(first.Next.Value) // 23.1.3 与其他语言的比较 与其他一些语言如C、C相比Go在指针的使用上更为安全。Go不允许进行指针运算这降低了因为错误操作而导致的程序错误的可能性。 3.2 关于引用这个术语 在其他一些编程语言中如C、Java引用与指针是两个不同的概念但在Go中我们主要使用指针而不是引用。 3.2.1 引用与指针的区别 在某些语言中引用是一个别名它表示某个变量。而指针则是一个变量其值是另一个变量的地址。 示例 在Go中我们不使用引用而是使用指针来实现间接引用。 var original int 10 pointerToOriginal : original*pointerToOriginal 20fmt.Println(original) // 输出20在上述示例中通过指针我们修改了original变量的值。 4. Go指针的特性与限制 4.1 Go指针的特性 4.1.1 零值 在Go中指针的零值是nil。这意味着如果你声明一个指针变量但没有明确初始化它的值就是nil。 示例 var ptr *int fmt.Println(ptr nil) // 输出true4.1.2 不支持指针算术 与C和C不同Go不支持指针算术操作。这是为了确保更高的内存安全性。 示例 在C或C中你可以做这样的操作 int arr[10]; int *ptr arr[0]; ptr;但在Go中类似的操作是不被允许的。 arr : [10]int{} ptr : arr[0] // ptr // 这行会报错因为Go不支持4.2 Go指针的限制 4.2.1 不支持指针到整数的转换 在某些低级编程环境中你可能需要将指针转换为整数进行某些操作或者反之。但在Go中这样的操作是不允许的以确保程序的安全性和可读性。 4.2.2 不能获取内建数据类型的地址 在Go中例如对于切片的元素或map的值我们不能直接获取其地址。 示例 m : map[string]int{Alice: 25} // ptr : m[Alice] // 这行会报错4.2.3 安全性 Go的设计者们故意限制了指针的某些能力以提高程序的安全性。例如你不能在Go中进行指针算术也不能随意地将指针与整数之间进行转换。 5. 总结 Go语言为现代编程提供了一种独特的途径。它不仅结合了经典的C风格语法还引入了一系列新颖的设计哲学。这其中Go对指针的处理尤为出色它既维护了指针的功能性又增强了代码的安全性。 深入的内存管理 Go语言通过指针让开发者有机会深入了解和管理内存。与直接操作值相比指针为数据操作带来了更大的灵活性特别是在处理大型数据结构或希望避免数据复制时。 安全性与简洁性的权衡 通过消除指针算术和严格的类型限制Go确保了程序员在操作指针时的安全性。这种设计选择可能限制了某些低级操作的能力但它大大降低了因为误用指针而导致的程序错误的风险。 高级与低级的结合 尽管Go提供了高级的数据结构如切片、映射等但它仍然允许程序员通过指针进行低级的内存操作。这为开发者提供了无与伦比的灵活性使他们既可以编写高性能的代码又不失代码的可读性和可维护性。 关注TechLead分享互联网架构、云服务技术的全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验同济本复旦硕复旦机器人智能实验室成员阿里云认证的资深架构师项目管理专业人士上亿营收AI产品研发负责人。
http://www.hkea.cn/news/14384882/

相关文章:

  • 上海的网站设计公司价格海外电商平台
  • 石岩网站设计佛山外贸网站
  • 360免费建站连接上饶建设银行网站
  • 网站如何做用户的实名认证苏州建设培训中心
  • 做网站做58好还是赶集好wordpress注册完成请检查电子邮件
  • 网站软文制作淘宝内部优惠券网站怎么做
  • 西樵网站制作四川seo多少钱
  • 如何优化网站关键字如何做网签合同 网站
  • 章丘做网站天眼查企业查询官网网页版
  • 怎样租用个人网站空间黄骅港股票代码
  • dw网站设计模板商业综合体
  • 制作网页的网站的软件是简述网站一般建设的流程
  • php 网站 服务器wordpress标签图片不显示
  • 本溪网站开发公司搜狗收录提交
  • 网站开发女生工资dw做单页网站教程
  • 网站短期电脑培训班学费discuz可以做门户网站么
  • 上海网站建设方案托管wordpress关闭电脑访问
  • 哪个网站上可以做外贸公司网站建设进度计划书
  • seo整站优化哪家好网站的主要功能模块
  • 采购网站有哪些小程序模板消息推送
  • 寿光网站建设公司免费海报背景素材
  • 设置网站建设天津市建设工程合同备网站
  • 网站备案代码如何加到驻马店住房和城乡建设厅网站
  • 包装公司网站模板下载提供医疗网站建设
  • 做公众号和网站主页的区别wordpress 4.7.3
  • vps能同时做网站同时做其它事吗高校网站如何建设
  • 北京网站模板建设网站的push运营怎么做
  • 长春网站建设方案优化网站模板预览
  • 关于做网站的宠物网站建设方案书
  • 南充高端网站建设沧州网络营销网络宣传业务