go语言 的 new 和不new

初学go语言,extjs + java  -》extjs + go 过程中,


type commonResult struct {
    Result   []searchResult `json:"result"`
    RowCount int            `json:"rowCount"`
    Pages    int            `json:"pages"`
    Code     string         `json:"code"`
    Msg      string         `json:"msg"`
    Success  bool           `json:"success"`
}
type searchResult struct {
    FeeName string `json:"feeName"`
    FeeType string `json:"feeType"`
    FeeCode string `json:"feeCode"`
}

//当结构体是基本数据类型时,不用new就可以直接拿来使用。

    for i := 0; i < 30; i++ {
        var queryResult searchResult
 
  
        queryResult.FeeType = "0"
        queryResult.FeeName = "用户手续费"
        queryResult.FeeCode = "00"
        result.Result[i] = queryResult
    }

但是,当结构体里有 slice(数组) 类型时,就必须得make(new)了。否则,就报数组越界错误。

    result := commonResult{make([]searchResult, 30), 0, 0, "", "", false}
 分析,当由多个对象组成数组时,就需要额外的属性支持,比如size。但是,go语言的结构体 不是 java里的 arrylist,不能提供自动开辟空间,所以就只能通过make开辟空间了,好比java里的 String[] a = new String[10],当a new 过以后,a的属性里的length 自动是10.这就容易理解了。 
  

但是,为啥基本数据类型 不用new 呢?为啥不统一呢。我想应该是go,来自于 C语言的缘故,反正这块理解起来不是很好。


你可能感兴趣的:(go)