使用{key:value}形式
zhouYu := FaShi{name:"zhouyu",sex:"男",AttackPower:789}
结构体指针
得到结构体的地址,就是结构体指针
fa := &xiaoQiao
(*fa).Skins = append((*fa).Skins, "青蛇")
方法
func (reciver type) methodName([parameter list]) ([return list]){
body
return value
}
来个输出格式化的代码
func (f *FaShi) String() string{
skins := ""
for _,s:= range f.Skins{
skins += s+" "
}
return "姓名:"+f.Name()+" 性别:"+f.Sex()+" 攻击力:"+fmt.Sprintf("%d",f.AttackPower)+" 皮肤:"+skins
}
Generate
GoLand有generate,可以生成构造函数和Getter、Setter
构造函数使用工厂模式,根据属性来进行对象的创建。选中首字母小写的属性,右键点击Generate或快捷键Alt+Insert。
代码
func NewFaShi(name string) *FaShi {
return &FaShi{name: name}
}
func (f *FaShi) Sex() string {
return f.sex
}
func (f *FaShi) SetSex(sex string) {
f.sex = sex
}
func (f *FaShi) Name() string {
return f.name
}
func (f *FaShi) SetName(name string) {
f.name = name
}
使用
shangGuan.SetName("上官婉儿")
huoWu.SetName("不知火舞")
方法和函数的区别
1)调用方式不一样
- 函数的调用方式:函数名(实参列表)
- 方法的调用方式:变量方法名(实参列表)
2)对于普通函数,形参为值类型时,不能将指针类型的数据直接传递,反之亦然
3)对于方法,形参为值类型时,可以直接用指针类型的变量调用方法,反过来同样也可以,内部属性是否改变取决于形参
匿名结构体
直接将结构体赋给一个变量
代码
zhuGe := struct {
Name string
}{Name:"诸葛亮"}
序列化
func Marshal(v interface{}) ([]byte, error)
Marshal函数返回v的json编码。
代码
shangJson, _ := json.Marshal(shangGuan)
注意:由于一般json的格式字符串都是小写的,所以希望返回小写的,但是结构体小写的属性又无法外部访问,所以在结构体的属性后面加了json 转json后的名字
全部代码
package main
import (
"encoding/json"
"fmt"
)
type FaShi struct{
name string
sex string
Skins []string `json:"skin"`
AttackPower int `json:"ap"`
}
func NewFaShi(name string) *FaShi {
return &FaShi{name: name}
}
func (f *FaShi) Sex() string {
return f.sex
}
func (f *FaShi) SetSex(sex string) {
f.sex = sex
}
func (f *FaShi) Name() string {
return f.name
}
func (f *FaShi) SetName(name string) {
f.name = name
}
func (f *FaShi) String() string{
skins := ""
for _,s:= range f.Skins{
skins += s+" "
}
return "姓名:"+f.Name()+" 性别:"+f.Sex()+" 攻击力:"+fmt.Sprintf("%d",f.AttackPower)+" 皮肤:"+skins
}
func main() {
//--------声明-----------
var shangGuan FaShi
var huoWu = FaShi{}
xiaoQiao := new(FaShi)
shangGuan.Skins = append(shangGuan.Skins, "天狼绘梦者")
huoWu.Skins = append(huoWu.Skins, "魅语")
(*xiaoQiao).sex = "女"
xiaoQiao.name = "小乔" //简化
fmt.Println("shangGuan Huowu xiaoQiao",shangGuan,huoWu,*xiaoQiao)
//-------声明并初始化--------
zhouYu := FaShi{name:"zhouyu",sex:"男",AttackPower:789}
fmt.Println("zhouYu:",zhouYu)
//----------结构体指针-------
fa := &xiaoQiao
![img](https://img-blog.csdnimg.cn/img_convert/16168afb410848c96b967bb639ba65e8.png)
![img](https://img-blog.csdnimg.cn/img_convert/9201ba81d3d453bf3f31ff9623edc5ed.png)
![img](https://img-blog.csdnimg.cn/img_convert/8d9c2ef415f77b1180600383ec9ed8db.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0
[外链图片转存中...(img-34Qwfk5A-1725657944601)]
[外链图片转存中...(img-umjxCnp7-1725657944601)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
加入社区》https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0