Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ch1-03 的一些建议 #63

Closed
xiaoliwang opened this issue Mar 2, 2018 · 3 comments
Closed

ch1-03 的一些建议 #63

xiaoliwang opened this issue Mar 2, 2018 · 3 comments

Comments

@xiaoliwang
Copy link
Contributor

其中有一段描写删除开头元素的文字。

a = []int{1, 2, 3}
a = append(a[:0], a[1:]...) // 删除开头1个元素
a = append(a[:0], a[N:]...) // 删除开头N个元素

我觉得一般读者在读到这里的时候,肯定会疑惑,为啥不使用下面这段代码,至少看上去会更简洁,平时也会去使用。

a = a[1:]
a = a[N:]

如果能加上两者的比较,我觉得会有更大的帮助。
下面是我写的一个简单的测试代码

a := []int{1, 2, 3, 4, 5, 6, 7, 8}

h1 := (*reflect.SliceHeader)(unsafe.Pointer(&a))
fmt.Println(h1)
fmt.Println((unsafe.Pointer)(h1))
fmt.Println((*int)((unsafe.Pointer)(h1.Data)))

b := a[5:]
h2 := (*reflect.SliceHeader)(unsafe.Pointer(&b))
fmt.Println(h2)
fmt.Println((unsafe.Pointer)(h2))
fmt.Println((*int)((unsafe.Pointer)(h2.Data)))

c := append(a[:0], a[5:]...)
h3 := (*reflect.SliceHeader)(unsafe.Pointer(&c))
fmt.Println(h3)
fmt.Println((unsafe.Pointer)(h3))
fmt.Println((*int)((unsafe.Pointer)(h3.Data)))
@chai2010
Copy link
Owner

chai2010 commented Mar 2, 2018

当时可能是为了深度挖掘append的用法,
毕竟简洁的方法不能覆盖全部的场景。

当然你的建议可以考虑下

@xiaoliwang
Copy link
Contributor Author

嗯嗯,真是非常感谢大大写了这本书。让我受益匪浅,这几天正在认真研读。

@chai2010
Copy link
Owner

已经调整了删除开头元素的方法,增加了以下的方法:

a = []int{1, 2, 3}
a = a[1:] // 删除开头1个元素
a = a[N:] // 删除开头N个元素

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants