初始结构体,被这个玩意儿搞糊涂了。
我个人的理解,结构体,就是先定义那么一个玩意儿,由他这个结构可以创建出对应的结构变量。可以把结构体想成数据库里面的一张表,结构体类似于js的object对象,我晕,这有点像json这种结构了。
然后又有点像python的类。但是里面的字段好像只支持常规的吧。先上代码再说
type books struct {
title string
author string
sub string
id int
price float32
}
定义好了过后,最开始再想怎么用,是不是需要定义个变量,然后用new方法去实例化一个结构?
b := new(books){"Go 语言", "www.runoob.com", "Go 语言教程", 2,1}
最开始这样想的,但是很抱歉,这是错误的写法。后面根据菜鸟教程,正确写法应该跟python里面直接实例化一个类是一样的:
b:=books{"Go 语言", "www.runoob.com", "Go 语言教程", 2,1}
b.author = "name"
fmt.Println(b)
把变量b实例化一个books结构出来,然后就可以修改里面的字段了,用b.author改变结构里的作者字段。
这应该是常规用法吧。后面我想想结构体里面能不能放数组字段,然后定义了一个如下的结构体:
type dict struct {
key string
value string
tmp []int
}
确实没报错,但是实例化的时候却不行了
dc := dict{key:"name",value:"大神",tmp:{5,6}}
fmt.Println(dc)
后面发觉肯定是自己的原因,改成如下就ok了:
dc := dict{key:"name",value:"大神",tmp:[]int{1,2}}
fmt.Println(dc)
看来直接写一个数组的值还是挺麻烦啊,python里面只需要写个[1,2],go里面还必须至少写成[]int{1,2},如果可以直接写{1,2}多好啊
可惜了,我知道这是不太现实的,勉强接受吧
2.结构体也是一个变量,可以函数传参传递它的指针,跟其他用法一致的
3.结构体重要的操作,绑定内部函数,可以实现像python里的类一样
type books struct {
title string
author string
sub string
id int
price float32
}
func (f *books) get_title() string{
return f.title
}
func main(){
b:=books{"Go 语言", "www.runoob.com", "Go 语言教程", 2,1}
fmt.Println(b.get_title())
}