<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>byte on 华说记录我的生活</title>
    <link>http://www.huasay.com/tags/byte/</link>
    <description>Recent content in byte on 华说记录我的生活</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh</language>
    <lastBuildDate>Fri, 04 Nov 2022 23:32:25 +0800</lastBuildDate>
    <atom:link href="http://www.huasay.com/tags/byte/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>[转]golang面试 - Rune与Byte的区别</title>
      <link>http://www.huasay.com/2022/11/04/diff_rune_byte/</link>
      <pubDate>Fri, 04 Nov 2022 23:32:25 +0800</pubDate>
      <guid>http://www.huasay.com/2022/11/04/diff_rune_byte/</guid>
      <description>以下文章转自 https://iswbm.com/517.html
一个字符串是由若干个字符组合而成的，比如 hello，就由 5 个字符组成。
在 Go 中字符类型有两种，分别是：
byte 类型：字节，是 uint8 的别名类型 rune 类型：字符，是 int32 的别名类型 byte 和 rune ，虽然都能表示一个字符，但 byte 只能表示 ASCII 码表中的一个字符（ASCII 码表总共有 256 个字符），数量远远不如 rune 多。
rune 表示的是 Unicode字符中的任一字符，而我们都知道，Unicode 是一个可以表示世界范围内的绝大部分字符的编码， 这张表里几乎包含了全世界的所有的字符，当然中文也不在话下。
能表示的字符更多，意味着它占用的空间，也要更大，所占空间是 4个 byte 的大小。
下面以一段代码来验证一下他们的占用空间的差异
1 2 3 4 5 6 7 8 var a byte = &amp;#39;A&amp;#39; var b rune = &amp;#39;B&amp;#39; fmt.Printf(&amp;#34;a 占用 %d 个字节数\n&amp;#34;, unsafe.Sizeof(a)) fmt.Printf(&amp;#34;b 占用 %d 个字节数\n&amp;#34;,unsafe.Sizeof(b)) // output a 占用 1 个字节数 b 占用 4 个字节数 参考文档： https://iswbm.</description>
    </item>
    <item>
      <title>golang面试 - string与[]byte的区别，如何互相转化</title>
      <link>http://www.huasay.com/2022/11/04/diff_string_byte/</link>
      <pubDate>Fri, 04 Nov 2022 23:32:25 +0800</pubDate>
      <guid>http://www.huasay.com/2022/11/04/diff_string_byte/</guid>
      <description>string是一个8位字节的集合，通常但不一定代表UTF-8编码的文本。string可以为空，但是不能为nil。string的值是不能改变的。string类型本质也是一个结构体，底层本质就是一个byte类型的数组。 byte就是uint8的别名，它是用来区分字节值和8位无符号整数值
string与[]byte的区别 对于[]byte与string而言，两者之间最大的区别就是string的值不能改变。string在底层都是结构体stringStruct{str: str_point, len: str_len}，string结构体的str指针指向的是一个字符常量的地址， 这个地址里面的内容是不可以被改变的，因为它是只读的，但是这个指针可以指向不同的地址。 string的好处：以在不加锁的控制下，多次使用同一字符串，在保证高效共享的情况下而不用担心安全问题
对于[]byte来说，以下操作是可行的：
1 2 b := []byte(&amp;#34;hello world&amp;#34;) b[1] = &amp;#39;i&amp;#39; string修改操作是被禁止的：
1 2 s := &amp;#34;hello world&amp;#34; s[1] = &amp;#39;i&amp;#39; string支持这样的操作：
1 2 s := &amp;#34;hello world&amp;#34; s = &amp;#34;iello world&amp;#34; string与[]byte的互相转化 string的底层数据结构类型：
1 2 3 4 type stringStruct struct { str unsafe.Pointer len int } []byte对应的底层数据结构（本质上是个slice）：
1 2 3 4 5 type slice struct { array unsafe.Pointer len int cap int } 两者对应的结构非常相似。</description>
    </item>
  </channel>
</rss>
