GO语言-new()分配与构造和初始化结构

GO语言-new()分配与构造和初始化结构,第1张

概述GO语言-new()分配构造初始化结构 学习笔记 new()和make()他们做不同的事情,并适用于不同类型,(初学时很容易能会造成混淆)不好理解啊 new()它是个内部函数,本质上和其它语言的同类一样; new(T)分配一块清零的存储空间给类型 T 的新项,并返回其地址,值类型为T 从字面上理解起来还不是很爽 下面写了五个例子,分别写了注释 /** * Created with Intel

GO语言-new()分配与构造和初始化结构

学习笔记

new()和make()他们做不同的事情,并适用于不同类型,(初学时很容易能会造成混淆)不好理解啊

new()它是个内部函数,本质上和其它语言的同类一样;

new(T)分配一块清零的存储空间给类型 T 的新项,并返回其地址,值类型为T

从字面上理解起来还不是很爽

下面写了五个例子,分别写了注释

/** * Created with IntelliJ IDEA. * User: liaojIE * Date: 12-9-7 * Time: 下午10:45 * To change this template use file | Settings | file Templates. * name:New() */package mainimport (	"fmt")//定义类型 Test为一个结构//这个结构为0值//这里相当如一个new(Test)分配一块清零的存储空间给类型Test//他的作用将接收一个类型 *Test的值type Test struct {	fd      int	name    string	nepipe  int}//这里将返回一个值*Test(暂理解为指针值吧)func Newfile(fd int,name string) *Test {	if fd < 0 {		return nil	}	f := Test{fd,name,2}	return &f}//有时零值是不够好的,初始化构造函数是必要的//这个时候我们就在里面新构func Newfile2(fd int,name string) *Test {	if fd < 0 {		return nil	}	f := new(Test)	f.fd = fd	f.name = name	f.nepipe = 0	return f}//注意:以上例子中很多注模。它是个每次求值即生成新实例的表达式。//如Newfile中 f := Test{fd,2} 和return &f 这样就产生了两次新实例(暂理解为使用了两个内存空间吧)//变量对应的存储空间在函数返回后仍然存在。每取一个组合字面的地址求值时都生成一个新实例,因此我们可以把最后两行合起来。func Newfile3(fd int,name string) *Test {	if fd < 0 {		return nil	}	//这样我们就只产生了一次新实例	//组合字面的Key必须按顺序给出并全部出现	return &Test{fd,3}}func Newfile4(fd int,name string) *Test {	if fd < 0 {		return nil	}	//如果明确使用   Key:value 对应元素,初始化可用任意顺序,未出现的Key对应着零值或空	//此例中把name放前面了,也没有定义nepipe	return &Test{name:name,fd:fd}}func Newfile5(fd int,name string) *Test {	if fd < 0 {		return nil	}	//注意,如果一个组合字面一个Key也没有,此类型将为零值。	//他的结果 &Test{} 和new(Test)是一样的。	return &Test{}}func main() {	//调用Newfile 看上面的注释应该清楚了得到的结果因该就是最开始定义的Test	//结果会是fd,nepipe	newfile:= Newfile(1,"Fuck you Test")	fmt.Printf("示例五:fd>%d | name>%s | nepipe>%d \n",newfile.fd,newfile.name,newfile.nepipe)	//调用Newfile2	newfile2:= Newfile2(2,"Fuck you Test2")	fmt.Printf("示例五:fd>%d | name>%s | nepipe>%d \n",newfile2.fd,newfile2.name,newfile2.nepipe)	//调用Newfile3	newfile3:= Newfile3(3,"Fuck you Test3")	fmt.Printf("示例五:fd>%d | name>%s | nepipe>%d \n",newfile3.fd,newfile3.name,newfile3.nepipe)	//调用Newfile4	newfile4:= Newfile4(4,"Fuck you Test4")	fmt.Printf("示例五:fd>%d | name>%s | nepipe>%d \n",newfile4.fd,newfile4.name,newfile4.nepipe)	//调用Newfile5	newfile5:= Newfile5(5,"Fuck you Test5")	fmt.Printf("示例五:fd>%d | name>%s | nepipe>%d \n",newfile5.fd,newfile5.name,newfile5.nepipe)}
总结

以上是内存溢出为你收集整理的GO语言-new()分配与构造和初始化结构全部内容,希望文章能够帮你解决GO语言-new()分配与构造和初始化结构所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1293308.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存