go学习笔记

指针使用

// Person 定义一个人的结构体
type Person struct {// 姓名Name string// 年龄Age int// 性别Sex string// 身份证号idNumber string
}//1、声明一个结构体变量var person Personfmt.Println(person.Name)     // ""fmt.Println(person.Age)      // 0fmt.Println(person.Sex)      // ""fmt.Println(person.idNumber) // ""// 修改结构体字段的值person.Name = "chenmingyong"fmt.Println(person.Name) // "chenmingyong"//2、使用复合字面值进行显式初始化结构体对象person := Person{"chenmingyong",18,"男","xxxxxxxxx",}fmt.Println(person)//3、 使用 field:value 形式的复合字面值进行显式初始化结构体对象   person := Person{Sex:      "男",Age:      18,Name:     "chenmingyong",idNumber: "xxxxxxxxx",}
//4、通过 new(T) 函数创建结构体指针fmt.Println(person) // {chenmingyong 18 男 xxxxxxxxx}person := new(Person)(*person).Name = "chenmignyong"fmt.Println((*person).Name) // chenmignyong// 简化赋值,底层自动转换成 (*person).Age = 18person.Age = 18fmt.Println(person.Age) // 18

结构体使用匿名字段

    type people struct {name stringage intdog //匿名字段}

go 指针结构体指针赋值的使用和区别

在 Go 语言中,使用指针类型可以方便地操作数据和结构体,指针类型通常用于修改和传递数据的引用。下面我们来看一下指针结构体指针赋值的使用和区别。
在 Go 语言中,结构体是值类型,当结构体作为参数传递时,会被复制,如果结构体数据量很大,那么复制的开销就很大,所以通常使用指针类型来传递结构体。在指针类型中,指针指向的是结构体的内存地址,可以通过指针来修改结构体的值。

type Person struct {Name stringAge  int
}func main() {p := &Person{"Tom", 18} // 创建一个 Person 类型的指针fmt.Println(*p)         // 输出:{Tom 18}p.Name = "Jerry" // 通过指针修改 Name 字段的值p.Age = 20       // 通过指针修改 Age 字段的值fmt.Println(*p)  // 输出:{Jerry 20}p2 := new(Person) // 使用 new 函数创建一个 Person 类型的指针p2.Name = "Lucy"  // 通过指针修改 Name 字段的值p2.Age = 22       // 通过指针修改 Age 字段的值fmt.Println(*p2)  // 输出:{Lucy 22}
}

在上面的示例中,我们首先创建了一个指向 Person 类型的指针,然后通过指针修改了结构体的值,接着使用 new 函数创建了一个 Person 类型的指针,通过指针修改了结构体的值。
总之,指针类型在 Go 语言中是非常常用的,可以用来修改和传递数据的引用,提高代码的效率和可读性。

Go结构体地址与普通变量地址

package mainimport "fmt"type Test struct {name string
}func main() {a := 90test := &Test{} //这里test是指针test.name = "小徐"var p *intp = &afmt.Println(p) //普通变量地址fmt.Println(test)fmt.Println(*test)fmt.Println("---------------")var t Testvar p2 *Testp2 = &tfmt.Println(t)fmt.Println(&t) //取结构体地址fmt.Println(p2)fmt.Println(*p2)fmt.Println("---------------")
} //结果:
0xc00000a0c0
&{小徐}
{小徐}
---------------
{}
&{}
&{}
{}
--------------- 

打印结构体里面的指针的值

type TRes struct {Data interface{} `json:"data"`
}func (c *MemberController) Test(ctx context.Context, req *TestReq) (r *TRes, err error) {var num int = 666var numPtr *int = &num*numPtr = 777r = &TRes{Data: numPtr,}fmt.Println(r)fmt.Println(r.Data)if val, ok := r.Data.(*int); ok {fmt.Println("val:", *val)}return
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/235205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习——html基础

什么是HTML Hyper Text Markup Language (超文本标记语言) 标记又俗称标签(tag)&#xff0c;一般格式&#xff1a; 如 <h1></h1>标签里还可以有属性(Attribute)&#xff1a; <tagName Atrribute “value" /> 如 <meta charset"utf-8"…

selenium自动化webdriver下载及安装

1、确认浏览器的版本 在浏览器的地址栏&#xff0c;输入chrome://version/&#xff0c;回车后即可查看到对应版本 2、找到对应的chromedriver版本 2.1 114及之前的版本可以通过点击下载chromedriver,根据版本号&#xff08;只看大版本&#xff09;下载对应文件 2.2 116版本通过…

【进阶篇】YOLOv8实现K折交叉验证——解决数据集样本稀少和类别不平衡的难题,让你的模型评估更加稳健

YOLOv8专栏导航&#xff1a;点击此处跳转 K折交叉验证 K折交叉验证&#xff08;K-Fold Cross-Validation&#xff09;是一种常用的机器学习模型评估方法&#xff0c;可以帮助我们评估模型的性能&#xff0c;特别适用于数据集相对较小的情况。 在K折交叉验证中&#xff0c;将原…

redis相关面试题

1、说一说你在项目中的redis的应用场景&#xff1f; 需要频繁查询的数据&#xff0c;分布式锁&#xff0c;spring session 5大value类型&#xff1a;string hash list set zset基本上就是缓存为的是服务无状态&#xff0c;延申思考&#xff0c;看你的项目有哪些数据结构或对象…

springboot 整合 springdataJPA 自定义操作 JPQL和SQL

1.接口StudentJPQLSQLMapper.java package com.jmj.springDataApp.mapper;import com.jmj.springDataApp.pojo.Student; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.da…

final的详解

在Java中&#xff0c;final 关键字用于表示不可改变的实体&#xff0c;可以应用于变量、方法、类和指令重排序。它有不同的作用&#xff0c;具体取决于它被应用的上下文。 1.对于变量&#xff1a; 如果一个变量被声明为 final&#xff0c;则该变量的值在一旦被赋予后就不能再被…

Starting the Docker Engine...一直转圈

出现的问题&#xff1a; 原因排查&#xff1a; 看了网上的很多篇文章&#xff0c;每个原因都排查了&#xff0c;没有发现问题。 遇到这样的情况应先看自己是否安装成功 打开运行&#xff0c;在空框中输入powershell并点击确定&#xff1a; docker version 显示版本证明安装…

3. 控制流程

3. 控制流程 ​ 跟任何的程序设计语言一样&#xff0c;Java使用条件语句和循环结构确定控制流程。 3.1 块作用域 ​ 块是指由一对大括号括起来的若干条简单的Java语句&#xff0c;块确定了变量的作用域。一个块可以嵌套在另一个块中。 常见例子&#xff1a; public static v…

微信小程序-选择和分割打开地图选择位置的信息

一、 前言 废话不多说&#xff0c;单刀直入。 本文要实现的功能是微信小程序中打开地图选择位置&#xff0c;以及将返回的位置信息分割。 例如返回的位置信息是&#xff1a;广东省深圳市龙岗区xxxxx小区 分割后变成&#xff1a; {province: "广东省",city: "深…

前端技术基建过程

1. 技术基建: 是研发团队的技术基础设施建设,是一个团队通用的技术能力沉淀. (1). 业务、架构、基建理解: ①. 业务支撑是活在当下②. 技术基建是活在未来(2). 意义: ①. 技术的价值在于解决业务问题,"业务支撑"和"基础建设"都是为了帮助业务解决问题②.…

042.Python异常处理_异常捕获

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

SpringBoot前后端分离开发项目部署时,项目打包准备工作

第一步&#xff1a;项目打包之前&#xff0c;拉前后端代码 拉完代码后&#xff0c;再执行下面操作&#xff08;确保项目能正常启动并运行&#xff09; 后端&#xff08;执行如下操作&#xff09; mvn clean install -T 8 -Dmaven.test.skiptrue -Dmaven.compile.forktrue 执行…

JDK17 SpringBoot3 整合常见依赖

JDK版本&#xff1a;17 SpringBoot 整合Mybatis Plus 、Redis等 依赖文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&q…

处理读写分离延迟

由于网络、CPU资源等原因&#xff0c;读写分离的延迟不可避免。所以&#xff0c;在引入读写分离方案的时候&#xff0c;要优先考虑数据延迟对业务是否有影响。下面主要讨论对有影响的情况下&#xff0c;有哪些方式可以尽量减少影响。 延迟处理方案 主从延迟可以很小&#xff…

【python】程序运行添加命令行参数argparse模块用法详解

Python标准库之argparse&#xff0c;详解如何创建一个ArgumentParser对象及使用 一. argparse介绍二. 使用步骤及参数介绍三. 具体使用3.1 设置必需参数3.2 传一个参数3.3 传多个参数3.4 位置参数和可选参数3.5 参数设置默认值3.6 其它用法 一. argparse介绍 很多时候&#xff…

Amazon CodeWhisperer 在 vscode 的应用

文章作者:旧花阴 CodeWhisperer 是一款可以帮助程序员更快、更安全地编写代码的工具&#xff0c;可以在他们的开发环境中实时提供代码建议和推荐。亚马逊云科技发布的这款代码生成工具 CodeWhisperer 最大的优势就是对于个人用户免费。以在 vscode 为例&#xff0c;演示安装过程…

LeetCode 1901. 寻找峰值 II:二分查找

【LetMeFly】1901.寻找峰值 II&#xff1a;二分查找 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-a-peak-element-ii/ 一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子(上、下、左、右)的元素。 给你一个 从 0 开始编号 的 m x n 矩阵 mat &#xff0c…

【漏洞复现】CVE-2023-6895 IP网络对讲广播系统远程命令执行

漏洞描述 杭州海康威视数字技术有限公司IP网络对讲广播系统。 海康威视对讲广播系统3.0.3_20201113_RELEASE(HIK)存在漏洞。它已被宣布为关键。该漏洞影响文件/php/ping.php 的未知代码。使用输入 netstat -ano 操作参数 jsondata[ip] 会导致 os 命令注入。 开发语言:PHP 开…

原子学习笔记3——使用tslib库

一、tslib介绍 tslib 是专门为触摸屏设备所开发的 Linux 应用层函数库&#xff0c;并且是开源。 tslib 为触摸屏驱动和应用层之间的适配层&#xff0c;它把应用程序中读取触摸屏 struct input_event 类型数据&#xff08;这是输入设备上报给应用层的原始数据&#xff09;并进行…

2023-2024-2Java面向对象程序设计-阶段性测试2

填空题&#xff08;总分&#xff1a;10.00&#xff09; 1、Java程序中使用【 import 】关键字导入外部的包。 2、使用【 final 】关键字声明的类不能有子类。 4、JVM是【 Java Virtual Machine 】的英文简写。 5、面向对象编程思想的三个特性是【封装】、【继承】、【多态】。 …