跟我学习Go语言(3)
内存分配
new
new(T)返回一个T的指针 指向一个零值T
make
make(T, args) 与new(T) 有着不同的功能。它只能创建slice,map和channel,并且返回一个有初始值(非零)的T 类型,而不是*T(返回的是引用,不是指针)。已完成初始化!
复合声明
复合声明&File{fd: fd, name: name} 从堆中分配。‘&’得到堆上分配到的内存地址。
new(T)返回一个T的指针 指向一个零值T
make(T, args) 与new(T) 有着不同的功能。它只能创建slice,map和channel,并且返回一个有初始值(非零)的T 类型,而不是*T(返回的是引用,不是指针)。已完成初始化!
复合声明&File{fd: fd, name: name} 从堆中分配。‘&’得到堆上分配到的内存地址。
array变量1
2
3
4var arr1 [10] int
arr2 := [3]int{1,2,3}
arr3 :=[…]int{1,2,1,3} //自动统计个数
a := [3][2]int { [2]int {1,2}, [2]int {3,4}, [2]int {5,6} }//多维数组
有一点需要注意:当向函数内传递一个数组的时候,它会获得一个数组的副本,而不是数组的指针。也就是说,数组做参数是值传递,不是引用传递,在函数内修改数组的元素,不会对函数外造成影响
学了几天的GO语言,感觉GO的设计目的是简捷、简用,GO不能算是一种面向对象的程序设计语言,例如,没有oop中的很多概念:继承、this指针、构造函数/析构函数等,但是对面向对象编程提供支持,可以定义抽象数据类型,允许定义成员方法等,这些特性表现在GO语言中的接口(interface)和结构体(struct),特别是接口(interface)在整个GO语言的体系中的作用非常重要。
1 | FileInputStream fis = new FileInputStream("E:\\1.txt"); |
InputStream类及子类(包括 FileInputStream BufferedInputStream)处理的都是字节流。OutputStream与之对应
Reader类及子类(包括FileReader BufferedReader)处理的都是字符流,构造函数需传入InputStream。Writer类与之对应
BufferedInputStream是包装类,必须传入要包装的InputStream。BufferedOutputStream与之对应
BufferedReader是包装类,必须传入要包装的Reader。BufferedWriter与之对应
InputStreamReader可以指定字符集,FileReader是使用系统默认字符集。OutputStreamWriter与之对应。例子:BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("E:\\笔记1.txt"),"GBK"));