golang指针转换,golang 转义字符

本文目录一览:

GO 一文搞懂指针和地址值的区别

go语言中的指针和地址值,在使用上常常具有迷惑性,主要是其特殊的*、符号的使用,可能会让你摸不透,本文希望能讲清楚go语言的指针(pointer)和值(value)。

这里先简单的对指针和地址值概念做一个定义:

这是因为go方法传递参数的方式导致的,go方法函数传递参数传递的是一个拷贝,看看下面的程序会输出什么?

答案是8,而不是9,因为AddAge函数修改的是学生的一个备份,而不是原始的学生对象

如果你想正确的给学生年龄增加的话,函数传递的需要是这个值的指针,如下所示:

需要注意的是,这里我们的指针传递的仍然是一个拷贝,比如,如果你将s赋值给另外一个指针地址,不会影响原有的指针,这点可以自行实践下。

那在使用go语言开发的时候,何时该用指针何时改用地址值呢?比如考虑以下场景:

简单原则: 当你不确定该使用哪种的时候,优先使用指针

如果考虑在数组、切片、map等复合对象中使用指针和值,比如:

很多开发者会认为b会更高效,但是被传递的都是一个切片的拷贝,切片本身就是一个引用,所以这里被传递的其实没有什么区别。

对于指针和地址值的使用,大家需要牢记的一点就是go数据传递的不可变性,活学活用此特点,在无状态函数中此特性非常有用。

go语言结构体变量和结构体指针变量的区别

主要看优先级别,-比++的优先级别高,++p-num,因为-优先级别高,所以先算p-num,然后num++,p++-num,先算p-num,然后p++

golang-指针类型

tips: *号,可以指向指针类型内存地址上的值,号,可以获取值类型的内存地址

每一个变量都有内存地址,可以通过变量来操作内存地址中的值,即内存的大小

go语言中获取变量的内存地址方法:通过 符号可以获取变量的地址

定义:普通变量存储的是对应类型的值,这些类型就叫值类型

变量b,在内存中的地址为:0x1040a124,在这个内存地址上存储的值为:156

定义:指针类型的变量存储的是⼀个地址,所以⼜叫指针类型或引⽤类型

b 是值类型,它指向的是内存地址上的值

a是指针类型,它指向的是b的内存地址

指针类型定义,语法: var 变量名 *类型

指针类型在定义完成后,默认为空地址,即空指针(nil)

在定义好指针变量后,可以通过***** 符号可以获取指针变量指向的变量

在这里的 *a 等价于 b,通过修改 *a ,最终修改的是值类型b的值

这里a,d是值类型,b,c是指针类型

d就相当于把a内存地址上值,在内存中从新开辟了一块空间存储,d和a互不影响

b,c相当于指向了a的内存地址,当使用*号引用出内存地址上的变量上,修改值得,a的值也会跟着改变

请Golang深度用户说说,现在Golang的性能可以和C比吗

不可以,完全没有可比性。

Golang的优势是开发速度,C可以自由、精准的操控内存。

拿string类型举个栗子:

1、修改字符串:

golang:需要分配新内存,然后进行内存copy。

c:可直接修改,可realloc。

2、存一段data:

golang:使用[]byte类型,[]byte转成string需要进行内存拷贝(排除掉利用指针进行类型转换的情况)。

c:直接用char[],可读可写。

golang中为了语言的安全性,类似的这种限制有很多,牺牲了一部分性能。但golang的优势也是显而易见的,goroutine、chan都很好用,而c则需要自己进行进程、线程的管控。

golang中级进阶(二):结构体

目录

一、结构体详解

1. 结构体定义

2. 实例化结构体的7种方法

二、结构体方法

1. 结构体的方法定义

2. 结构体内自定义方法的引用

3. 任意类型添加方法

三、嵌套、继承

1. 匿名结构体

2. 结构体中可以定义任意类型的字段

3. 结构体嵌套结构体

4. 结构体嵌套匿名结构体

5. 结构体嵌套多个匿名结构体

6. 结构体继承

四、结构体和JSON相互转换

1. 结构体转化成json

2. json转化成结构体

3. 结构体标签 tag

4. 嵌套结构体和json的序列化反序列化

Golang 中没有“类”的概念,Golang 中的结构体和其他语言中的类有点相似。和其他面向对 象语言中的类相比,Golang 中的结构体具有更高的扩展性和灵活性。

Golang 中的基础数据类型可以表示一些事物的基本属性,但是当我们想表达一个事物的全 部或部分属性时,这时候再用单一的基本数据类型就无法满足需求了,Golang 提供了一种 自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体,英文名称 struct。 也就是我们可以通过 struct 来定义自己的类型了。

使用 type 和 struct 关键字来定义结构体,具体代码格式如下:

type 类型名 struct {

字段名 字段类型

字段名 字段类型 …

}

其中:

• 类型名:表示自定义结构体的名称,在同一个包内不能重复。

• 字段名:表示结构体字段名。结构体中的字段名必须唯一。

• 字段类型:表示结构体字段的具体类型。

在 go 语言中,没有类的概念但是可以给类型(结构体,自定义类型)定义方法。所谓方法 就是定义了接收者的函数。接收者的概念就类似于其他语言中的 this 或者 self。

方法的定义格式如下:

func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) {

函数体

}

注意:想改变结构体内的值,必须先变成指针。

在 Go 语言中,接收者的类型可以是任何类型,不仅仅是结构体,任何类型都可以拥有方法。 举个例子,我们基于内置的 int 类型使用 type 关键字可以定义新的自定义类型,然后为我们 的自定义类型添加方法。

注意:匿名结构体中不允许出现多个重复的类型

注意:如果结构体里面有私有属性也就是小写定义的字段,则不会被json使用

golang里如何将一个struct指针转换成slice

[plain] package main import “unsafe” import “fmt” func abc() { type T struct { a int b int c int } type SliceHeader struct { addr uintptr len int cap int } t := T{a: 1, b: 2, c: 3} p := unsafe.Sizeof(*t) println(int(p)) sl := SliceHeader{ addr: uintptr(unsafe.Pointer(t)), len: int(p), cap: int(p), } b := *(*[]byte)(unsafe.Pointer(sl)) println(len(b)) fmt.Println(b) b[0] = 7 b[4] = 5 b[8] = 8 fmt.Println(t) } func main() { abc() } 郑重声明:心醉学院发布此信息的目的在于传播更多信息,文章观点纯属作者个人意见,不代表本网观点。不对您构成任何建议,据此操作,风险自担。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/305202.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2025-01-01 11:06
下一篇 2025-01-01 11:06

相关推荐

  • 英语年龄用连字符号(Hyphenation for English Age)

    英语年龄通常使用连字符号表示,比如 “five-year-old boy”。本文将从多个方面探讨英语年龄的连字符使用问题。 一、英语年龄的表达方式 英语中表…

    编程 2025-04-29
  • Python字符转列表指南

    Python是一个极为流行的脚本语言,在数据处理、数据分析、人工智能等领域广泛应用。在很多场景下需要将字符串转换为列表,以便于操作和处理,本篇文章将从多个方面对Python字符转列…

    编程 2025-04-29
  • Python学习笔记:去除字符串最后一个字符的方法

    本文将从多个方面详细阐述如何通过Python去除字符串最后一个字符,包括使用切片、pop()、删除、替换等方法来实现。 一、字符串切片 在Python中,可以通过字符串切片的方式来…

    编程 2025-04-29
  • 指针Python:为什么Python中不需要使用指针?

    在Python中,指针的使用不像其他语言一样那么常见。这是因为Python有自己的内存管理方式,所以在大多数情况下,不需要显式地使用指针。那么,为什么Python中不需要使用指针呢…

    编程 2025-04-29
  • 使用Golang调用Python

    在现代软件开发中,多种编程语言的协作是相当普遍的。其中一种使用场景是Golang调用Python,这使得在使用Python库的同时,可以利用Golang的高性能和强大并发能力。这篇…

    编程 2025-04-29
  • Python计算中文字符个数

    本文将从多个方面对Python计算中文字符个数进行详细的阐述,包括字符串长度计算、正则表达式统计和模块使用方法等内容。 一、字符串长度计算 在Python中,计算字符串长度是非常容…

    编程 2025-04-29
  • Python中如何判断字符为数字

    判断字符是否为数字是Python编程中常见的需求,本文将从多个方面详细阐述如何使用Python进行字符判断。 一、isdigit()函数判断字符是否为数字 Python中可以使用i…

    编程 2025-04-29
  • 使用Golang创建黑色背景图片的方法

    本文将从多个方面介绍使用Golang创建黑色背景图片的方法。 一、安装必要的代码库和工具 在开始创建黑色背景图片之前,我们需要先安装必要的代码库和工具: go get -u git…

    编程 2025-04-29
  • Python中逗号算字符吗

    Python中逗号既可以作为分隔符,也可以作为一个表达式中的运算符。关于逗号作为分隔符是不会被算作字符的事情,这点大家都知道。本文主要就是阐述逗号作为运算符在表达式中是会被算作字符…

    编程 2025-04-28
  • 从16进制转义到中文字符

    16进制转义是为了在不同的字符集、不同的编码下,能够保证特殊字符被正确的识别和渲染。本文将从多个方面对16进制转义做详细的阐述,让读者对其有更深入的了解。 一、转义实现 在Web开…

    编程 2025-04-28

发表回复

登录后才能评论