亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在golang中定義一個返回可變大小切片的函數

在golang中定義一個返回可變大小切片的函數

Go
慕斯709654 2021-07-27 10:07:00
我想構建一個返回任意大小切片的函數。我知道我能做到func BuildSlice() [100]int { return [100]int{} }但我希望能夠從同一個函數返回不同大小的切片。就像是:func BuildSlice(int size) [...]int { return [size]int{} }我已經嘗試了上述以及func BuildSlice(size int) []int { return [size]int{} }請指出我正確的方向。
查看完整描述

2 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

首先,切片已經是“可變大小”:[100]int并且[...]int是數組類型定義。


[]int 是切片的正確語法,您可以將函數實現為:


func BuildSlice(size int) []int {

    return make([]int, size)

}

這將返回具有所需大小的零值切片,類似于您的數組版本所做的。


查看完整回答
反對 回復 2021-08-02
?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

Go 編程語言規范


制作切片、貼圖和通道


內置函數 make 接受類型 T,它必須是切片、映射或通道類型,可選地后跟特定于類型的表達式列表。它返回一個類型為 T(不是 *T)的值。內存按照初始值部分中的描述進行初始化。


Call             Type T     Result


make(T, n)       slice      slice of type T with length n and capacity n

make(T, n, m)    slice      slice of type T with length n and capacity m

大小參數 n 和 m 必須是整數類型或無類型。常量大小參數必須是非負的并且可以由 int 類型的值表示。如果 n 和 m 都提供并且是常數,則 n 不得大于 m。如果在運行時 n 為負數或大于 m,則會發生運行時恐慌。


s := make([]int, 10, 100)       // slice with len(s) == 10, cap(s) == 100

s := make([]int, 1e3)           // slice with len(s) == cap(s) == 1000

s := make([]int, 1<<63)         // illegal: len(s) is not representable by a value of type int

s := make([]int, 10, 0)         // illegal: len(s) > cap(s)

例如,


package main


import "fmt"


func main() {

    s := make([]int, 7, 42)

    fmt.Println(len(s), cap(s))

    t := make([]int, 100)

    fmt.Println(len(t), cap(t))

}

輸出:


7 42

100 100


查看完整回答
反對 回復 2021-08-02
  • 2 回答
  • 0 關注
  • 396 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號