Go基础——指针、结构体

news2024/12/27 12:39:22

1、指针
Go语言指针与C差不多,取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。
变量是一种使用方便的占位符,用于引用计算机内存地址。一个指针变量可以指向任何一个值的内存地址,它所指向的值的内存地址在 32 和 64 位机器上分别占用 4 或 8 个字节,占用字节的大小与所指向的值的大小无关。当一个指针被定义后没有分配到任何变量时,它的默认值为 nil。
每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。

func ptr_test() {
	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)
}

指针也可为空:当一个指针被定义后没有分配到任何变量时,它的值为 nil。

var  ptr *int
fmt.Printf("ptr 的值为 : %x\n", ptr  )

输出:0

指向值指针的指针(类似链表):
如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。
当定义一个指向指针的指针变量时,第一个指针存放第二个指针的地址,第二个指针存放变量的地址:
在这里插入图片描述

func main() {
   var a int
   var ptr *int
   var pptr **int
   a = 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)
}

Go语言里很多调用都是通过指针!

2、结构体
数组可以存储同一类型的数据,但在结构体中可以为不同项定义不同的数据类型。与C语言类似,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。

package main

import "fmt"

type Books struct {
	title   string
	author  string
	subject string
	book_id int
}

func main() {
	var book Books
	CrateStruct()
	NewStruct(&book)
}

func CrateStruct() {
	// 创建一个新的结构体
	fmt.Println(Books{
		"Go",
		"www.aaa.com",
		"Go 基础",
		6495407})

	// 也可以使用 key => value 格式
	fmt.Println(Books{
		title:   "Go",
		author:  "www.aaa.com",
		subject: "Go 基础",
		book_id: 6495407})

	// 忽略的字段为 0 或 空
	fmt.Println(Books{title: "Go", author: "www.aaa.com"})

}

func NewStruct(b *Books) {
	b.title = "Go"
	b.author = "www.aaa.com"
	b.subject = "Go基础"
	b.book_id = 123456
	fmt.Println(b.title) // Go
	fmt.Println(*b)      // {Go www.aaa.com Go基础 123456}
}

Go语言里面还可将结构体与json进行映射:

package main

import (
	"encoding/json"
	"fmt"
	"log"
)
// 定义结构体字段 映射到json时的字段
type Bookss struct {
	Title   string `json:"title"`
	Author  string `json:"author"`
	Subject string `json:"subject"`
	BookID  int    `json:"book_id"`
}

func main() {
	book := Bookss{
		Title:   "Go",
		Author:  "www.aaa.com",
		Subject: "Go 基础",
		BookID:  123456,
	}
	jsonData, err := json.Marshal(book)  //  将结构体转换为json,返回值为byte类型
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println((string(jsonData)))
}

//  输出:{"title":"Go","author":"www.aaa.com","subject":"Go 基础","book_id":123456}

3、错误处理

在结构体中使用过err变量处理内置函数的错误返回值,内置函数一般都会有错误返回值,Go语言通过内置的错误接口提供了非常简单的错误处理机制。
error 类型是一个接口类型:

type error interface {
    Error() string
}

编写函数时,可常在最后的返回值中返回错误信息,使用 errors.New 可返回一个错误信息:

func Heelo(f float64) (float64, error) {
    if f < 0 {
        return 0, errors.New("Hello:No Money!")   // 实际为字符串
    }
}
result, err:= Heelo(-1)
if err != nil {
   fmt.Println(err)
}

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

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

相关文章

第24期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练 Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

一副耳机两种体验,好看好听降噪强,FIIL Key Pro上手

户外使用蓝牙耳机时&#xff0c;降噪功能真的是必不可少&#xff0c;特别是通勤高峰期&#xff0c;能有效隔绝周围的嘈杂声&#xff0c;对于上班族来说&#xff0c;真的会舒服很多。市场上有很多降噪耳机可供选择&#xff0c;相比于价格上千的发烧级装备&#xff0c;我更倾向于…

聊点技术|秒级根因定位可能吗?博睿数据将不可能变为可能

10月20日&#xff0c;数智融&#xff0c;ONE向新——博睿数据2023秋季产品发布会圆满落幕&#xff0c;全新一代一体化智能可观测平台Bonree ONE 2023秋季正式版焕新发布&#xff0c;重点升级了数据采集、全局拓扑、数据分析、会话回放等多个功能模块&#xff0c;为组织提供了更…

人工智能基础_机器学习017_SGD随机梯度下降求解多元一次方程_以及求解多元一次方程---人工智能工作笔记0057

然后我们再来看一下X.shape 这个用来显示,一个矩阵的形状,其实就是几行几列对吧 然后,比如上面这个是100行 ,9列,其实对应我们的方程上,就是 8元一次方程, w1到w8加上w0 一共9列,然后有100个样本,也就是100行数据对吧 然后我们来看一下我们用SGD随机梯度下降来实现一个一元一…

VBA技术资料MF78:产生随机字符串密码

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

【Jena系列】Jena基本介绍

序言 做一件事并不难&#xff0c;难的是在于坚持。坚持一下也不难&#xff0c;难的是坚持到底。 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记一级论点蓝色&#xff1a;用来标记二级论点 希望这篇文章能让你不…

(3)小程序如何绑定事件

<view bindtap"led">日志</view> 一&#xff1a;用什么绑定事件&#xff1f; 用这个bindtap 在框架中绑定事件 二&#xff1a;在ts文件中如何去操作 led:function(){console.log(this.data.message)this.setData({message: "现在"})}led&am…

YOLO算法改进4【中阶改进篇】:添加DeformableConvolution v2可变形卷积模块

论文地址&#xff1a; https://arxiv.org/abs/1811.11168 源码地址&#xff1a;https://github.com/msracver/Deformable-ConvNets 传统的卷积操作是将特征图分成一个个与卷积核大小相同的部分&#xff0c;然后进行卷积操作&#xff0c;每部分在特征图上的位置都是固定的。这样…

ESP32网络开发实例-Web服务器显示LM35传感器数据

Web服务器显示LM35传感器数据 文章目录 Web服务器显示LM35传感器数据1、LM35介绍2、软件准备3、硬件准备4、代码实现4.1 LM35与ADS1115驱动4.2 Web服务器显示LM35传感器数据本文将介绍有关如何在ESP32的Web服务器中显示LM35 温度传感器数据。 1、LM35介绍 LM35 用于测量物体或…

C++标准输入输出类cout,cin用法概述

cout 标准输出类 不同进制输出数字 cout 数字数字默认是以十进制表示&#xff0c;也可以是用其他的进制表示&#xff1a;例如&#xff1a; 八进制&#xff1a;std::cot std::cout << std::oct << i << std::endl; 十进制&#xff1a;std::dec std::cout…

【腾讯云HAI域探秘】0基础也能开发应用

【腾讯云HAI域探秘】0基础也能开发应用 文章目录 【腾讯云HAI域探秘】0基础也能开发应用前言腾讯云高性能应用服务&#xff08;HAI&#xff09;的简介环境搭建启动 高性能应用服务HAI 配置的 ChatGLM2-6B WebUI 进行简单的对话总结 前言 在当今数字化时代&#xff0c;人工智能…

通过IIS和内网穿透实现快速搭建本地web服务器并实现公网访问

文章目录 1.前言2.Windows网页设置2.1 Windows IIS功能设置2.2 IIS网页访问测试 3. Cpolar内网穿透3.1 下载安装Cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5.结语 1.前言 在网上各种教程和介绍中&#xff0c;搭建网页都会借助各种软件的帮助&#xf…

最新国产企业级低代码盘点:看看哪款更适合你

中国低代码平台市场在2018年开始崭露头角&#xff0c;于2021年逐渐形成一套完整的低代码、无代码市场生态体系。据艾瑞咨询发布的《2022年低代码行业研究报告》显示&#xff0c;与2020年相比&#xff0c;中国低代码市场规模将大幅增长至29.3亿元。预计未来五年&#xff0c;市场…

【EI会议征稿】第三届计算机、人工智能与控制工程国际学术会议(CAICE 2024)

The 3rd International Conference on Computer, Artificial Intelligence and Control Engineering (CAICE 2024) 第三届计算机、人工智能与控制工程国际学术会议 第三届计算机、人工智能与控制工程国际学术会议&#xff08;CAICE 2024&#xff09;将于2024年1月26-28日在西安…

UniPro自定义个人专属工作台 大幅提升工作效率

很多研发团队在开完每日站会后&#xff0c;工程师的工作习惯便是打开研发管理系统&#xff0c;先看看自己的待办事项&#xff0c;或是查看同事的需求、评论&#xff0c;亦或是查看今日份工作的高优先级项等等。 如何方便工程师能够快速查看和了解一天的工作究竟从哪开始呢&…

插件_日期_lunar-calendar公历农历转换

现在存在某需求&#xff0c;需要将公历、农历日期进行相互转换&#xff0c;在此借助lunar-calendar插件完成。 下载 [1] 通过npm安装 npm install lunar-calendar[2]通过文件方式引入 <script type"text/javascript" src"lib/LunarCalendar.min.js">…

Cannot resolve class ‘DruidDataSource‘

无法配置 DataSource&#xff1a;未指定“url”属性&#xff0c;并且无法配置嵌入数据源。 原因&#xff1a;无法确定合适的驱动程序类 原因是数据库没有配置或者没事错误 1配置配置文件报错 没有依赖 pom.xml加入 <dependency><groupId>com.alibaba</grou…

Databend + lakeFS:将数据版本控制嵌入你的分析工作流

作者&#xff1a;尚卓燃&#xff08;PsiACE&#xff09; 澳门科技大学在读硕士&#xff0c;Databend 研发工程师实习生 Apache OpenDAL(Incubating) Committer PsiACE (Chojan Shang) GitHub 云计算为以数据为中心的应用提供了廉价、弹性、共享的存储服务&#xff0c;这为现代…

致远OA wpsAssistServlet接口存在任意文件上传漏洞

致远OA wpsAssistServlet接口存在任意文件上传漏洞 免责声明漏洞描述漏洞影响漏洞危害网络测绘Fofa: app"致远互联-OA" && title"V8.0SP2" 漏洞复现1. 构造poc2. 发送数据包3. 访问webshell地址 免责声明 仅用于技术交流,目的是向相关安全人员展示…

10个国内设计师都在用的Figma插件分享给你,超实用!

随着设计工具的不断发展和持续创新&#xff0c;产生了许多实用的小插件&#xff0c;可以帮助设计师朋友们有效提高设计效率&#xff0c;节省不必要的设计时间和设计精力到意义和价值更高的设计部分上去。而Figma作为一个功能丰富有强大的专业设计工具&#xff0c;深受国内设计师…