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(指针运算)实现高效转换。
  • 相关阅读:
    一套完整的javascript面试题
    遇到的java.lang.NoClassDefFoundError解决了
    Win7下启动Internet信息服务(IIS)管理器
    我的第一个专业博客
    “用NetBeans打开项目时项目名变成红色”问题解决
    Struts2框架实现计算器功能
    MyEclipse移动包到另一个项目时出现错误:Resource is out of sync with the file system.
    制作Javascript弹出窗口技巧九则
    windows 的鼠标事件(Event)
    Javascript使用cookie
  • 原文地址:https://www.cnblogs.com/hzpeng/p/15464215.html
Copyright © 2011-2022 走看看