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语言的缘故,反正这块理解起来不是很好。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值