黑马程序员技术交流社区

标题: 【上海校区】go语言 的 new 和不new [打印本页]

作者: 不二晨    时间: 2018-12-18 16:52
标题: 【上海校区】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 = 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语言的缘故,反正这块理解起来不是很好。
---------------------
【转载】仅作分享,侵删
作者:heshi_82215
原文:https://blog.csdn.net/heshi_82215/article/details/52238189



作者: 不二晨    时间: 2018-12-18 17:55
奈斯




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2