golang 字符串浅析

【golang】unsafe.Sizeof浅析 【golang】unsafe.Sizeof浅析 博主也是正在学习golang,在学习过程中遇到了SizeOf的问题。我原先以为,golang中的sizeof和c的sizeof差不多,但是当我开始使用的时候,才发现了许多奇怪的问题 slice := []int{1,2,3} fmt.Println(unsafe.Sizeof(slice)) //24 上面声明了一个切片,然后打印出sizeof... 阅读详情
go的字符串是只读的
测试源代码
package main

import (
	"fmt"
	"unsafe"
)

func swap(x, y string) (string, string) {
	return y, x
}

func print_string(obj *string, msg string) {
	string_ptr := (*[2]uintptr)(unsafe.Pointer(obj))
	first_obj_addr := string_ptr[0] // 存储字符串地址的对象

	first_byte := (*[5]uint8)(unsafe.Pointer(first_obj_addr)) // 将uintptr转成可解引用的地址
	fmt.Printf("%s\n", msg)
	fmt.Printf("\t%p\n", first_byte)
	fmt.Printf("\t%c\n", *first_byte)

	// first_byte[0] = 'E' // line 21
}

func test_swap() {
	var a, b string = "Hello", "World"

	fmt.Println(unsafe.Sizeof(string("")))

	print_string(&a, "-------a-------")
	print_string(&b, "-------b-------")

	a, b = swap(a, b)

	print_string(&a, "-------a-------")
	print_string(&b, "-------b-------")

	// 经过上述测试, 字符串结果为两个变量, 第一个地址, 第二个长度
	// sizeof(string)大小为16
	// swap的本质类似于std::move, 将a和b的内部变量进行了交换, 并没有将字符串进行拷贝
}

func main() {
	test_swap()
	for {

	}
}

程序启动

在这里插入图片描述
查看程序在linux的内存分布
在这里插入图片描述
a和b所指向的字符串的地址在只读段,故当放开21行尝试修改内存时,会触发SIGSEGV信号,导致程序异常结束

【golang】浅析rune,byte 【golang】浅析rune,byte golang内置类型有rune类型和byte类型。 需要知晓的是rune类型的底层类型是int32类型,而byte类型的底层类型是int8类型,这决定了rune能比byte表达更多的数。 在unicode中,一个中文占两个字节,utf-8中一个中文占三个字节,golang默认的编码是utf-8编码,因此默认一个中文占三个字节,但是golang中的字符串... 阅读详情

相关推荐

Golang 词法分析器浅析

     浅析 Go 语言的词法分析器 章节目录 简介 Token Scanner 例子 作者能力有限, 如果您在阅读过程中发现任何错误, 还请您务必联系本人,指出错误, 避免后来读者再学习错误的知识.谢谢! 简介## 在本文我们将简单的走读 Go 语言的词法分析器实现(go/scanner/scanner.go). 本文基于 Go 1.11.4....

Useless Programmer 的专栏 3750

Go语言的字符串浅析

字符串 字符串是 UTF-8 字符的一个序列(当字符为 ASCII 码时则占用 1 个字节,其它字符根据需要占用 2-4 个字节)。UTF-8 是被广泛使用的编码格式,是文本文件的标准编码,其它包括 XML 和 JSON 在内,也都使用该编码。由于该编码对占用字节长度的不定性,Go 中的字符串也可能根据需要占用 1 至 4 个字节(示例见第 4.6 节),这与其它语言如 C++、Java 或者 Python 不同(Java 始终使用 2 个字节)。Go 这样做的好处是不仅减少了内存和硬盘空间占用,同时也不

Peppa Pig 416

Go中rune类型浅析

🚀 优质资源分享 🚀 学习路线指引(点击解锁) 知识定位 人群定位 🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 一、字符串简单遍历操作 在很多语言中,字符串都是不可变类型,golang也是。 1、访问字符串字符 如下代码,可以实现访问字符串的单个字符和单个字节 package m

weixin_45566993的博客 706

go 字符串操作性能 浅析

go 性能分析 性能分析函数 // 统计内存, // Alloc 表示分配的栈内存 // total 表示系统从开始使用的总内存(可能包括被销毁的内存) func displayMemory(tag string) { memStats := runtime.MemStats{} runtime.ReadMemStats(&memStats) fmt.Printf("[...

有酒吗 347

基于深度学习的图像去雨(Opencv,Pytorch,Cnn)

最近做了一个图像去雨项目,使用的语言为Python,深度学习框架为Pytorch。去雨效果不错,具体请看效果视频!图像去雨(GAN,Opencv,Pytorch)

Czqqwer的博客 2611

ADS交叉耦合振荡器VCO仿真

本文主要参考视频中如何使用进行ADS交叉耦合振荡器仿真和分析,由于视频中有诸多错误和视频清晰度较低,虽然视频博主及时改正,为了节省学习时间,可以直接参考本文。

qq_32589131的博客 5421

golang unsafe.Sizeof浅析

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.youkuaiyun.com/HaoDaWang/article/details/80005072 【golang】unsafe.Sizeof浅析 博主也是正在学习golang,在学习过程中遇到了SizeOf的问题。我原先以为,golang中的sizeof和c的s...

taoerchun的专栏 798

【数据库】SQL Server 2008 R2 安装全流程详解与常见问题避坑指南

本文详细解析了SQL Server 2008 R2的完整安装流程与核心配置。从安装前的系统兼容性检查、.NET Framework依赖准备,到图文详解实例配置、混合身份验证模式设置等关键步骤,并提供了安装失败、服务无法启动等高频问题的排查与避坑指南,帮助用户顺利完成部署。

java5的博客 1241

【Go】GO语言知识总结浅析

Go语言是一种现代化的编程语言,由Google于2007年设计并于2009年发布。它旨在使编程变得简单、高效,并且可以在多核处理器上轻松构建高性能应用。本文将介绍Go语言的编程思想、发展历史、版本特点、运行原理、数据类型、应用场景,以及在web开发、网络编程等领域的应用。

wnm23的专栏 1522

C/C++面试八股文汇总

以对象管理资源,利用的就是C++构造的对象最终会被对象的析构函数销毁的原则。上述的的申请、使用、释放资源的程序较为简单,但是如果程序很复杂的时候,需要为所有的new 分配的内存delete掉,导致极度臃肿,效率下降,更可怕的是,程序的可理解性和可维护性明显降低了,当操作增多时,处理资源释放的代码就会越来越多,越来越乱。栈在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。

wzzrh的博客 1万+

CEH Practical 实战考试真题与答案

CEH Practical 是 EC-Council 推出的Certified Ethical Hacker(CEH)认证项目中的一项高级动手实践考试。它不同于传统的理论考试,侧重于在真实环境中检验考生的实操能力。

sgafdgdagd的博客 966

Golang中对字符串string的相关操作

几乎任何程序都离不开文本(字符串)。文本操作是最常用的一个内容。 golang中拥有string的内置类型,可以使用与普通slice类型相似的性质。 1.简介 strings包提供了很多操作字符串的简单函数,通常一般的字符串操作都可以在这个包中找到。 strconv 包提供了基本数据类型和字符串之间的转换。在Go 中,没有隐式的类型转换,一般的类型可以使用类型名的方式进行转换,例如:int64...

wxs0607 691

基于STM32的蓝牙智能药盒设计

本研究设计了一种基于STM32F103C8T6单片机的蓝牙智能药盒系统,针对老年人用药管理需求,集成了定时提醒、药量检测、环境监测等功能。系统通过LCD1602显示屏实时显示时间与用药信息,支持每日3次定时提醒及3种药物用量设置,采用DHT11温湿度传感器、HX711药量检测模块和红外传感器实现环境监控,并通过蓝牙模块实现远程用药提醒。测试结果表明,系统定时误差≤30秒,温湿度监测精度±2℃,药量检测误差<1g,各项功能运行稳定。该设计为解决老年人用药依从性问题提供了智能化解决方案,具有实用价值和应用前景。

3254968421的博客 542

Go语言中的rune类型浅析

rune是Go语言中一种特殊的数据类型,它是int32的别名,几乎在所有方面等同于int32,用于区分字符值和整数值 1 package main 2 3 import "fmt" 4 5 func main() { 6 7 var str = "hello 世界" 8 fmt.Println("len(str):", len(str)) ...

weixin_30299709的博客 1881

16、TFT-LCD 1.8寸显示屏使用

1.8寸TFT-LCD显示屏,简单来说就是用来显示东西的显示器,跟之前的oled1315显示屏的作用是一样的,今天我们就来使用TFT显示屏显示一些内容。1.8寸TFT-LCD显示屏,简单来说就是用来显示东西的显示器,跟之前的oled1315显示屏的作用是一样的,今天我们就来使用TFT显示屏显示一些内容。这块显示屏在淘宝就可以买得到,驱动版本是ST7735S,这里圈住,一会要考的。

繁星点点~ 6768

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

浅析一下 Go 的 Split

Go 的 Split 分析

Duyf的博客 2002

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

浅析 Go IO 的知识框架

坚持思考,就会很酷Go 和 IO 的不解之缘?Go 是一种高性能的编译性语言,天然支持高并发,语言级别封装协程,号称可以支持成千上万,十万,甚至百万的协程并发。这个量级远不是线程可比的。前...

slphahaha的博客 1329

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

golang json浅析

json常用方法示例 package main import ( "encoding/json" "fmt" "os" "time" ) type info struct { Name string `json:"name"` Age int `json:"age"` Extra interface{} `json:"extra"` }...

新之助的博客 306

Go入门-字符串

1. 建立一个Go程序打印下面的内容(到100个字符): A AA AAA AAAA AAAAA AAAAAA AAAAAAA ... package main import "fmt" func main() { str := "" for i := 1; i< 100; i ++ { fmt.Printf("%s\...

zhengwish的专栏 217

【golang】浅析rune数据类型

在学习golang基础的时候,发现有个叫rune的的数据类型,当时不理解这个类型的意义。 查询,官方的解释如下: // rune is an alias for int32 and is equivalent to int32 in all ways. It is // used, by convention, to distinguish character values from int...

idwtwt的专栏 1256

golang slice原理浅析

文章目录slice内存模型slice的初始化slice的底层数组slice的扩容规则 slice内存模型 我的go源码版本是:go1.17.2 slice的源码在Go_SDK\go1.17.2\src\runtime\slice.go中。 和map.go在同一个目录下。 首先我们来看一下slice的结构: type slice struct { array unsafe.Pointer len int cap int } slice的结构非常简单,只有三个部分: array:

qq_49723651的博客 724

Go 浅析interface

interface 的数据结构 eface 和 iface 源码: type iface struct { tab *itab data unsafe.Pointer } type eface struct { _type *_type data unsafe.Pointer } eface 表示空的 interface{},它用两个机器字长表示,第一个字 _type 是指向实际类型描述的指针,第二个字 data 代表数据指针。 iface 表示至少带有一个函数的 interface,

weixin_46041797的博客 440

自顶向下浅析go-iris框架

浅析go-iris框架 1. web框架的工作流程 2. go-iris框架简析 2.1 代码示例 构建web服务流程 基础示例 package main import ( "github.com/kataras/iris/v12" ) func main() { app := iris.New() app.Get("/", indexHandler) app.Run(iris.Addr(":8080")) } func indexHandler(ctx iri

bug生产者,code搬运工 873
上一篇: 【CentOS 7更换为阿里云源】
下一篇: TCP simultaneous open测试
山有木兮啊
博客等级 码龄8年 135粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值