Golang学习笔记 结构体和指针

2023-11-18

Golang是一门很特殊的语言,虽然它出生比较晚,但是在很多地方却和现在的编程语言有所不同。现在的编程语言要么是函数式的、要么是面向对象的,而Go语言却有指针、结构体这些概念,并解决了C语言的一些坑。从这个角度上说,Golang可以看做C语言的填坑加强版。

结构体

定义结构体

定义结构体和C语言一样,使用struct关键字。在结构体内部定义它们的成员变量和类型。如果成员变量的类型相同还可以把它们写到同一行。

type Person struct {
    age  int
    name string
}

初始化

初始化结构体需要使用一个特殊一点的语法,这就是结构体字面量。在结构体字面量中,可以按照顺序初始化结构体、也也可以按照关键字初始化结构体。如果按照关键字初始化结构体,可以只指定部分值,未指定的值将会使用默认值来初始化。

p1 := Person{24, "易天"}
p2 := Person{age: 24, name: "易天"}
p3 := Person{age: 24}
p4 := Person{name: "张三"}
fmt.Println(p1, p2, p3, p4)

访问结构体

最后要说的就是访问结构体了。结构体的成员都是公有的,所以可以直接用点号.访问。

p1.age = 26
p1.name = "王五"
fmt.Println(p1)

指针

Go的指针

如果学习过C语言的话,对指针的概念应该会比较熟悉。在Go语言中,直接砍掉了最复杂的指针运算的部分,只留下了获取指针(&运算符)和获取对象(*运算符)的运算。

a, b := 3, 5
pa, pb := &a, &b
fmt.Println(*pa, *pb)

隐式解引用

对于一些复杂类型的指针, 如果要访问成员变量的话,需要写成类似(*p).field的形式,Go提供了隐式解引用特性,我们只需要p.field即可访问相应的成员。

p1 := &Person{name: "易天", age: 24}
fmt.Println((*p1).name)
fmt.Println(p1.name)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Golang学习笔记 结构体和指针 的相关文章

随机推荐

  • 微信小程序列表item左滑操作

    页面DOM index wxml
  • TLAB简单介绍

    1 什么是TLAB 新对象都是在Eden区分配空间 这块空间是在多线程间共享的 那么考虑一下 多线程是可能同时创建新对象的 这时候必然需要一种同步机制 使用队列 或者通过互斥 这些方式确实都可以 不过 我们还有一种更好的方式 TLAB 它全
  • 网络传输基本流程

    网络传输流程图 在数据链路层有一个标识 每一台主机的唯一符 MAC地址 MAC地址 计算机的网卡在出厂时就打上了一串数据 MAC 地址 其通常是唯一的 所以局域网中发消息必须加上目的主机的MAC地址 两台计算机通过 TCP IP 协议通讯的
  • 【算法笔记】Prim算法

    定义 prim算法 图论中的一种算法 可在加权连通图里搜索最小生成树 由此算法搜索到的边子集所构成的树中 不但包括了连通图里的所有顶点 并且其所有边的权值之和最小 算法描述 输入 一个加权连通图 其中顶点集合为V 边集合为E 初始化 Vne
  • Spring Cloud

    添加config properties文件就行了 内容为空的都可以 加上该文件再次运行
  • 如何防止CSRF攻击

    随着互联网的高速发展 信息安全问题已经成为企业最为关注的焦点之一 而前端又是引发企业安全问题的高危据点 在移动互联网时代 前端人员除了传统的 XSS CSRF 等安全问题之外 又时常遭遇网络劫持 非法调用 Hybrid API 等新型安全问
  • Lunece全文检索搜索引擎

    Lunece全文检索 1 什么是全文检索 lucene是apache软件基金会4 jakarta项目组的一个子项目 是一个开放源代码的全文检索引擎工具包 但它不是一个完整的全文检索引擎 而是一个全文检索引擎的架构 提供了完整的查询引擎和索引
  • Postman如何做接口测试,那些不得不知道的技巧

    目录 导读 前言 Postman如何做接口测试1 如何导入 swagger 接口文档 Postman如何做接口测试2 如何切换测试环境 Postman如何做接口测试3 什么 postman 还可以做压力测试 Postman如何做接口测试4
  • substance designer中的warp节点分析

    一直觉得warp挺适用 但是用起来有时候效果挺奇怪的 还有directional warp貌似两个产生的效果截然不同 于是尝试用u3d 材质实现下 directional warp 这个节点主要功能是用灰度信息推开像素 常常用来分割连续贴图
  • Ubuntu安装配置tftp服务器

    Ubuntu安装配置tftp服务器 实验环境 ubuntu 1604 x64 一 安装配置 建立tftp目录 sudo mkdir tftpboot sudo chmod 777 tftpboot 安装客户端和服务器 sudo apt ge
  • 大数据量的冒泡排序 (计次数)

    题目描述 给定一个包含从0到n 1各一次的数组 若使用冒泡排序将其排为升序 问其中需要进行多少次交换 输入 测试数据有多组 每组由两行组成 第一行包含正整数n n lt 5000 下一行包含从0到n 1的n个整数的序列 输出 对于每组测试数
  • [论文分享] Adversarial Training for Raw-Binary Malware Classifiers

    Adversarial Training for Raw Binary Malware Classifiers USENIX 2023 Keane Lucas Carnegie Mellon University Samruddhi Pai
  • 面试题61. 扑克牌中的顺子(java+python)

    从若干副扑克牌中随机抽 5 张牌 判断是不是一个顺子 即这5张牌是不是连续的 2 10为数字本身 A为1 J为11 Q为12 K为13 而大 小王为 0 可以看成任意数字 A 不能视为 14 示例 1 输入 1 2 3 4 5 输出 Tru
  • hex文件格式学习记录

    hex文件 hex文件是什么 hex文件的数据结构 按照记录类型具体分析 Mermaid Flowchart hex文件是什么 它是由一行行符合Intel HEX 文件格式的文本所构成的ASCII 文本文件 每一行包含一 个 HEX 记录
  • Java实验三 基于GUI的网络通信程序设计【代码构建逻辑】【双向通信】【超多细节优化!!】

    写在前面 这次实验代码的构建主要是更加熟练的运用socket网络编程 文件输入输出流 GUI设计 容器的使用 多线程的运用等等多方面的知识 是综合类题型 做完受益身心的类型 题目如下 编写程序完成以下功能 1 设计一个基于GUI的客户 服务
  • iOS的几个特效实现思路

    最近看一个app的源码 发现基本没有用第三方的开源组件 但是特效也做得不错 总结一下实现的思路 简单的抽屉效果 效果如图 这种抽屉效果很常见 开源组件也很多 但是一般开源组件都对Controller的结构有要求 有时候不是很方便 原理主要是
  • qmake手册(Qt5.9.3)

    qmake手册 qmake手册 概观 描述一个项目 建立一个项目 使用第三方库 预编译头文件 入门 从简单的开始 使应用程序可调试 添加平台特定的源文件 如果文件不存在停止qmake 检查多个条件 创建项目文件 项目文件元素 变量 注释 内
  • 小程序报错:Unexpected end of JSON input

    报错原因 跳转页面传参内包含英文 let data aaa 你学会了吗 由于参数内携带英文 所以报错 wx navigateTo url home home data encodeURI JSON stringify data 解决方法 先
  • ECCV20 - OCRNet:聚合对象上下文特征用于语义分割《Object-Contextual Representations for Semantic Segmentation》

    文章目录 原文地址 论文阅读方法 初识 相知 主要技术 部分实验 回顾 原文地址 原文 论文阅读方法 三遍论文法 初识 对于语义分割这类密集预测任务 上下文特征是非常重要的信息 在早期的一些工作中 主要着重于捕获多尺度特征 空间维度 比如P
  • Golang学习笔记 结构体和指针

    Golang是一门很特殊的语言 虽然它出生比较晚 但是在很多地方却和现在的编程语言有所不同 现在的编程语言要么是函数式的 要么是面向对象的 而Go语言却有指针 结构体这些概念 并解决了C语言的一些坑 从这个角度上说 Golang可以看做C语