文章目录
  1. 1. 内存分配
    1. 1.1. new
    2. 1.2. make
    3. 1.3. 复合声明
  2. 2. type
  3. 3. 结构体(struct)
    1. 3.1. 用法
    2. 3.2. 定义方法
  4. 4. 转换

内存分配

new

new(T)返回一个T的指针 指向一个零值T

make

make(T, args) 与new(T) 有着不同的功能。它只能创建slice,map和channel,并且返回一个有初始值(非零)的T 类型,而不是*T(返回的是引用,不是指针)。已完成初始化!

复合声明

复合声明&File{fd: fd, name: name} 从堆中分配。‘&’得到堆上分配到的内存地址。

type

用法:
type foo int
使foo与int一样 与c/c++中typedef一样(foo与int位置相反)

结构体(struct)

注意:方法和成员变量命名以大小写确定是否可以导出(即大写开头为public 小写开头为pravite

用法

1
2
3
4
type NameAge struct {   //可以有匿名字段
name string //不导出
age int //不导出
}

定义方法

1
2
func (n1 *NameAge) func1(n2 int ) { /* */ }
func (n1 NameAge) func2(n2 int ) { /* */ }

func1是&NameAge上的方法,可以修改NameAge成员变量的值
func2是NameAge上的方法,不可以修改NameAge成员变量的值
Go语言里为了贯彻方便开发的原则,内部实现NameAge.func1(int)等价于(&NameAge).func1(2)
注意:x.m()等价于(&x).m()

转换

From b []byte i []int r []rune s string f float32 i int
To
[]byte []byte(s)
[]int []int(s)
[]rune []rune(s)
string string(b) string(i) string(r)
int float32(i)
float32 int(f)

string(97)得到结果为“a”,如果是想将97转换成“97”,就要使用strconv包里的Itoa方法。strconv.Itoa(97)。另外strconv包里还有其他的转换方法,下篇会有介绍。

文章目录
  1. 1. 内存分配
    1. 1.1. new
    2. 1.2. make
    3. 1.3. 复合声明
  2. 2. type
  3. 3. 结构体(struct)
    1. 3.1. 用法
    2. 3.2. 定义方法
  4. 4. 转换