go语言的new和make

http://1.guotie.sinaapp.com/?p=407

golang的new和make主要区别如下:

1、make只能用来分配及初始化类型为slice,map,chan的数据;new可以分配任意类型的数据

2、new分配返回的是指针,即类型*T;make返回引用,即T;

3、new分配的空间被清零,make分配后,会进行初始化。effective go举了一个例子,见:http://golang.org/doc/effective_go.html#allocation_make

对于struct的分配和初始化,除了可以使用new外,还可以这样做: T {},例如

func TestAlloc(t *testing.T) {
	type T struct {
		n  string
		i  int
		f  float64
		fd *os.File
		b  []byte
		s  bool
	}

	var t1 *T
	t1 = new(T)
	fmt.Println(t1)

	t2 := T{}
	fmt.Println(t2)

	t3 := T{"hello", 1, 3.1415926, nil, make([]byte, 2), true}
	fmt.Println(t3)
}

值得注意的是,如果使用T{}的方式初始化变量的话:
1、与C语言不同,T{}分配的局部变量是可以返回的,且返回后该空间不会释放,例如

import "fmt"
type T struct {
    i, j int
}
func a(i, j int) T {
    i := T { i, j}
    return i
}
func b {
    t = a(1, 2)
    fmt.Println(t)
}

2、一个语法问题
使用T{}来初始化时,符号}不能单独占一行,否则会报错,如下:

missing ',' before newline in composite literal

或者

syntax error: need trailing comma before newline in composite literal
non-declaration statement outside function body
syntax error: unexpected }

我曾经因为这个问题找了很久才解决。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值