美文网首页
2023-10-28-第一段

2023-10-28-第一段

作者: 护念 | 来源:发表于2023-10-27 14:54 被阅读0次

今天周末,分段学习,对学习的第一段内容总结

1. 从数组中切片

切片后仍然是引用

//  结构体也可以用于切片
d := [5]struct{
  x int
}{}

s := d[:]
s[0].x = 10
s[1].x = 20

// d 后 s 同时改变
fmt.Println(d, s)

// 输出
// [{10} {20} {0} {0} {0}] [{10} {20} {0} {0} {0}]

2. 切片append返回一个新的切片(非引用)

a := []int{1, 2, 3, 4}
b := append(a, 5)

// 取地址时候必须要用& 不像其它类型/值
// 地址不同 因为也是新的对象
fmt.Printf("a地址:%p;b地址: %p\n", &a, &b)
// a地址:0xc000118018;b地址: 0xc000118030

// ...将切片展开 插入
c := append(a, b...) 
fmt.Println(c)
// [1 2 3 4 1 2 3 4 5]

arr := [...]int{2,9,10}
d := append(a, arr[:]...) // 数组需要切了后 append
fmt.Println(d)
// [1 2 3 4 2 9 10]

3. copy复制数组

copy(a,c) 将c拷贝到a

a := []int{1,2,3}
b := []int{4,6,8,12}

copy(a,b) // 拷贝时候根据最短的切片决定 b 拷贝 到 a
fmt.Println(a, b)
// [4 6 8] [4 6 8 12]

4. 切片后容量cap由原切片的剩余元素决定

a := []int{0,1,2,3,4,5,6,7,8}
b := a[4:6] // 元素为 [4,5] +剩余元素为 6,7,8 ,所以cap为 2 + 3 = 5

fmt.Println(b, len(b), cap(b))
//[4 5] 2 5 

5. 遍历切片

a := []int{2,4,8}

for index, value := range a {
  fmt.Printf("index: %d  value: %d\n", index, value)
}

// index: 0  value: 2
// index: 1  value: 4
// index: 2  value: 8

6. 切片resize 一个切片长度只有1,如果继续切超过其长度,其实也是可以的

a := []int{0,1,2,3,4,5,6,7,8,9}
b := a[3:4] //切完后为 [3]

c := b[:3] // 此时切已经操作了b元素个数,原b只有1个元素,这个时候切的是 3,4,5 相当于在a的基础上做了切

fmt.Println(b, c)
// [3] [3 4 5]

7. 切片会随着元素增多而动态扩充cap,扩充方式为2倍法

a := make([]int, 1) // 默认等于 make([]int, 1,1)因此 len = cap
c := 1 // 初始化cap

for i := 0; i < 100; i ++ {
    a = append(a, i)

   if cap(a) != c {
        fmt.Printf("cap %d -> %d\n", c, cap(a))
       c = cap(a)
  }
}

//cap 1 -> 2
//cap 2 -> 4
//cap 4 -> 8
//cap 8 -> 16
//cap 16 -> 32
//cap 32 -> 64
//cap 64 -> 128

8. 字符串 也可以切片

因为:它的底层是一个[]byte数组

str := "hello world"
a := str[6:]

fmt.Printf("类型%T  原生情况:%#v\n", a, a)
// 类型string  原生情况:"world"

9. 字符串改变

默认情况下字符串不可改变

str := "hello world"
// a := str[:]
// 错误写法 切出来后还是string类型 这里不能赋值
// a[0] = 'b' 

// 先转[]byte 对于中文转 []rune- unicode后操作,然后转换会string
b := []byte(str)
b[0] = 'H'

str = string(b)
fmt.Println(str)
// Hello world

str1 := "我的祖国"
c := []rune(str1)
c[2] = '家'
c[3] = '乡'
str1 = string(c)
fmt.Println(str1)
// 我的家乡

10. go中单引号和双引号的区别

  • 单 - 字符
  • 双 -字符串

相关文章

  • 测试微信

    二级标题 强调一下 第一段第一段第一段第一段第一段第一段第一段第一段第一段第一段第一段第一段第一段第一段第一段第一...

  • 第一段

    写作是很简单的事。简单到不知道该怎么下笔。

  • 第一段

    “人终有一死,除非成就上古大能,否则谁能不死?”“我这一世,快意恩仇,杀伐果断,也曾经风光无限,现在才死,值了!”...

  • 第一段

    喜剧的核心是悲剧。人生也是的。如果你把自己活的很悲剧,可能在别人眼里就是个笑话。你为某样事物努力,得到可喜的结果,...

  • 第一段

    在朋友的介绍下我开始了自己的第一次助教之旅,虽然去到那个补习班的路途中出现了一点小问题,等车等了好久,后来还迷失了...

  • 第一段

    昨天晚上十一点过的时候,室友准备开始party。几个美国女生彼此检查着化妆,一个格外高挑的在镜子前反反复复旋转着裙...

  • 第一段

    有意义和没有意义 开始和结束 内和外

  • 第一段

    工作。爱情。学业。未来。 迷茫。犹豫。始终无法做出决定,或许并没有正确答案。也算是知道了自己短时间内所想要的,但是...

  • 第一段

    早晨起床第一件就是看风景,清晨的阳光照耀着刚从梦中醒来的大地,欣欣然张开眼的小草伴随着小鸟的歌声伸了伸懒腰,一缕缕...

  • ES6模块

    我是第一个自然段我是第一个自然段我是第一个自然段我是第一个自然段我是第一个自然段我是第一个自然段我是第一个自然段我...

网友评论

      本文标题:2023-10-28-第一段

      本文链接:https://www.haomeiwen.com/subject/fyauidtx.html