标签:实战 string int fmt Human Go gi 指针
1. 什么是指针
指针是存储内存地址的变量类型
2. 指针的声明与使用
指针的声明可以用一个已经存在的变量,也可以用 new(T) 的形式:
var num int = 5
p_num := &num
fmt.Printf("[%p] [%d]\n", p_num, *p_num) // 输出结果为:[0xc0000120a0] [5]
p_string := new(string)
*p_string = "It's Taco Tuesday, gi gi gi gi gi gi gi"
fmt.Println(*p_string)
可以看到,它的使用与大部分语言一样,用 & 来取地址,用 * 来解引用。
对于自定义类型,还有一种简便声明指针的方法:
type Human struct {
age int
name string
sex string
}
func (p Human) String() string {
return fmt.Sprintf("[Name: %s] [Age: %d] [Sex: %s]", p.name, p.age, p.sex)
}
func main() {
p := &Human{34, "James", "male"}
fmt.Println(*p) // 输出结果为:[Name: James] [Age: 34] [Sex: male]
}
上面的代码中,直接将结构体的初始化和指针的初始化写在一行了,是比较简洁的写法。
至于那个String()函数是怎么回事,fmt输出结果为什么是那样,在结构体一章会讲到。
4. 指针的零值
指针的零值是nil,不是NULL
5. 打印类型名称
打印类型名称用 %T 占位符:
n := 5
p_int := &n
fmt.Printf("[%T] [%T]\n", n, p_int) // 输出结果为:[int] [*int]
6. 指针数组和切片
指针数组可以做到在函数传参时,函数内部的操作改变原数组的元素,但这不是Go的惯用做法,Go为我们提供了切片,直接使用切片就好。
7. 指针运算
Go不支持指针的运算:
str := "Golang"
p_str := &str
//p_str++ // 无效的运算,编译报错
8. 实际应用 -- 实现自定义类型方法
在上面的Human结构体中,我们为Human类型定义了一个String()方法,func后面的(p Human)表示这个方法是Human类型的方法,这里如果不用指针,就是一个简单的值传递,不会改变原始数据,需要注意。
标签:实战,string,int,fmt,Human,Go,gi,指针 来源: https://blog.csdn.net/zhounixing/article/details/105841002
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。