惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
Jina AI
Jina AI
雷峰网
雷峰网
Blog — PlanetScale
Blog — PlanetScale
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
博客园 - 司徒正美
罗磊的独立博客
J
Java Code Geeks
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
Vercel News
Vercel News
A
About on SuperTechFans
I
InfoQ
D
DataBreaches.Net
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
aimingoo的专栏
aimingoo的专栏
宝玉的分享
宝玉的分享
P
Proofpoint News Feed
Microsoft Azure Blog
Microsoft Azure Blog
美团技术团队

博客园 - moonz-wu

招聘研发工程师 职业规划:管理vs技术 PacificA中的租约与失效检测解读 可扩展的事件复用技术:epoll和kqueue 面试的,或许用的着 Zero to One读后感 Fourth glance in Go Second glance in Go First glance in Go 好RESTful API的设计原则 RESTful API的设计与开发 架构风格之比较 所有有意愿成为程序员的人都应该看的文章 马不停蹄的向前走着,却发现羊已经等在了前面-我的2014 Hadoop从伪分布式到真正的分布式 看到一篇很有意思的文章,但是我们身边确实有这样的人 如何延长windows评估版的方法 关于技术的选择,作为开发人员你应该看看 新的一年又开始了
Third glance in Go
moonz-wu · 2015-02-06 · via 博客园 - moonz-wu

在Go語言裏關於數組(Array),切片(Slice)和映射表(Map)的使用是非常常見的。有過其他語言編程背景的人會比較熟悉一下,但是也是因爲過於的熟悉,從而導致一個慣性思維,往往就會踢到“石頭”,我就是其中之一。先說數組問題:

其他的沒什麼,但是在傳遞數組指針到函數的時候,Go裏面是這樣的如果你想傳遞一個數組指針到函數裏,你必須明確給出數組的大小

func updateItem(arr *[]int) {
    arr[2] = 1
}

func main() {
    arr := new([10]int)
    updateItem(arr)
}

這樣是不行的,編譯時會給你報一個類型不匹配的錯誤,你必須這樣寫

func updateItem(arr *[10]int) {
    arr[2] = 1
}

 除了指針以外,你還可以使用切片來傳遞數組,只不過會變成這樣,不過這也是Go裏面常規的做法。

func updateItem(arr []int) {
    arr[2] = 1
}

func main() {
    arr := new([10]int)
    updateItem(arr[:])
}

 另外一个疑惑就是切片的长度与容量的定义,搞不清楚make([]int, 10, 50)后,如何去填充后40个内存空间的值? 原来是可以通过切片的扩容来对后40个空间进行访问。切片重新扩容必须以0开始,如

var slice1 = make([]int, 10, 50)
slice1 = slice1[0:len(slice1) +1]

这样就给切片增加了一个空间。