zoukankan      html  css  js  c++  java
  • 字符串-《go语言底层原理剖析》读书笔记

    字符串

    • 字符串一般有两种类型,一种在编译时指定长度,不能修改;一种具有动态长度,可以修改。
    • go语言中的字符串是不能修改的,只能被访问,不能使用索引对字符串内容进行修改。
    • 字符串的终止方式有两种,一种是c语言中的隐式申明,以字符""作为终止符。一种是go语言中的显示申明。
    • go语言字符结构体,Data:指底层的字符数组,Len:代表字符串的长度。
    • 字符串本质上是一串字符数组,每个字符在存储时对应了一个或多个整数,设计字符集的编码方式。
    • go语言中所有文件都采用utf-8的编码方式,同时常量字符使用utf-8的字符集编码,字母占1个字节,中文占3个字节。
    • 符文类型:go语言设计者认为用字符标识字符串的组成元素可能会产生歧义,因为有些字符非常相似,例如小写字母a和带重音符号的a,它们在编码后的整数是不同的,所以go语言中使用符文(rune)类型来表示和区分字符串中的“字符”,rune其实是int32的别称。
    • 使用range轮询字符串时,轮询的不是单个字符,而是具体的rune,range返回的两个参数:index,value;其中index代表每个rune的字节偏移量,value为int32,代表符文数。
    • 字符常量存储于静态存储区,其内容不可以被改变,申明时有单引号和双引号两种方法。
    • 字符常量的拼接发生在编译时,而字符串常量的拼接发生在运行时。拼接后的字符串小于32字节时,会有一个临时的缓存供其使用。当拼接的字符串大于32字节时,会请求在堆中分配内存。
    • 注意:字节数组与字符串的相互转换并不是无损的指针引用,涉及了复制,string和[]byte的直接转换是通过底层数据copy实现的,可以通过unsafe.Pointer(指针转换)和uintptr(指针运算)实现高效转换。
  • 相关阅读:
    Android系统介绍与框架(转)
    6个值得推荐的Android开源框架简介(转)
    程序员最喜爱的12个Android应用开发框架二(转)
    android在代码中四种设置控件(以及TextView的文字颜色)背景颜色的方法
    Android数据缓存(转)
    [UI]实用案例--Shape绘制实用圆圈
    接口API测试和返回值JSON解析的插件
    Android LayoutInflater详解(转)
    一个json字符串
    Android中设定EditText的输入长度(转)
  • 原文地址:https://www.cnblogs.com/hzpeng/p/15464215.html
Copyright © 2011-2022 走看看