随笔 - 56  文章 - 0 评论 - 0 阅读 - 50712

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package main
 
import (
    "fmt"
)
 
func main() {
 
    s := "你好,世界.æ"
 
    for i, b := range []byte(s) {
        fmt.Printf("%d %d\n", i, b) //i=0~15 ; 3*4+2*1+1*2 = 16
    }
 
    n := len(s) //len(string) = the number of bytes.
 
    for i:=0;i<n;i++ {
        fmt.Printf("%d %d\n", i, s[i]) //效果同上
    }
 
    for i, c := range s {
        //按rune字符迭代
        fmt.Printf("%d %d %c \n", i, c,c) //0 20320 你,1 22909 好,2 44 ,,3 19990 世,4 30028 界,5 46 .,6 230 æ
        // string(c) 字符转为字符串 , []byte(s) 字符串转byte数组:byte数组和字符串的转换效率非常高 O(1)
                fmt.Println([]byte(string(b)))
        /*
          这里可以很清楚的看到 汉字:3byte; ascii:1byte; 英语音标字符:2byte
          [228 189 160]
          [229 165 189]
          [44]
          [228 184 150]
          [231 149 140]
          [46]
          [195 166]
        */
    }
 
    //  The len built-in function returns the length of v, according to its type:
    //  Array: the number of elements in v.
    //  Pointer to array: the number of elements in *v (even if v is nil).
    //  Slice, or map: the number of elements in v; if v is nil, len(v) is zero.
    //  String: the number of bytes in v.
    //  Channel: the number of elements queued (unread) in the channel buffer;
    //  if v is nil, len(v) is zero.<br>
    //对于指针类型,只有数组的指针可以取 len
    a := [4]int{1,2,3}
    fmt.Println(len(a))   //4
    fmt.Println(len(&a))  //4 对数组指针取len 就是数组的长度
    fmt.Println(len(*&a)) //4
 
    b := []int{1,2,3}
    fmt.Println(len(b)) //3
    //fmt.Println(len(&b)) invalid 对切片引用的指针取 len 是非法的
    fmt.Println(len(*&b)) //4
 
    //fmt.Println(len(&s)) invalid 对字符串指针取 len 是非法的。
}
posted on   scala  阅读(1142)  评论(0编辑  收藏  举报
编辑推荐:
· 用 .NET NativeAOT 构建完全 distroless 的静态链接应用
· 为什么构造函数需要尽可能的简单
· 探秘 MySQL 索引底层原理,解锁数据库优化的关键密码(下)
· 大模型 Token 究竟是啥:图解大模型Token
· 35岁程序员的中年求职记:四次碰壁后的深度反思
阅读排行:
· 基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
· 电商平台中订单未支付过期如何实现自动关单?
· 用 .NET NativeAOT 构建完全 distroless 的静态链接应用
· 上周热点回顾(3.31-4.6)
· 爆肝 1 周,为我的白板工具支持了 mermaid 流程图,为 ai 生成流程图铺平道路
点击右上角即可分享
微信分享提示