1.简单结构体
/*
普通结构体
*/
type Student struct {
Name string
Age int
Score int
}
/*
双向链表
*/
type List struct {
Name string
Next* List
Prev* List
}
/*
二叉树
*/
type Tree struct {
Name string
left* Tree
right* Tree
}
2.创建
/*
make 用来创建map、slice、channel
new用来创建值类型
*/
func RunStruct() {
//结构体(传入其他函数,修改是不会同步到本身的)
var stu1 Student
//指针(可以对本身修改)
var stu2 = new(Student)
var stu3 = &Student{"name",66,100}
stu1.Age =777
fmt.Println(stu1,stu2,stu3)
fmt.Println(stu3.Age)
use(stu1,stu3)
fmt.Println(stu1,stu3)
tagRun()
}
func use(stu1 Student, stu3 *Student) {
stu1.Age = 100
stu3.Age = 1000
}
3.struct的方法
type Person struct {
Name string
Age int
}
/*
struct的方法
名称
大写外部可访问
小写只有本包才能访问
*/
func (this Person) test() {
fmt.Println(this.Age)
}
/*
实现 string方法,fmt.Println(m) 会自动输出这个
*/
func (m Person) String() string {
return m.Name + "66666"
}
4.tag
/*
转成json的时候 后面的名字会替换前面的名称(前面必须大写,不然会被json格式化丢弃)
*/
type Person struct {
Name string `json:"name"`
Age int `chinaL:"dabai"`
}
/*
struct的方法
名称
大写外部可访问
小写只有本包才能访问
*/
func (this Person) test() {
fmt.Println(this.Age)
}
/*
实现 string方法,fmt.Println(m) 会自动输出这个
*/
func (m Person) String() string {
return m.Name + "66666"
}
func tagRun() {
person := Person { "tom", 12 }
//json 格式化
if b, err := json.Marshal(person); err != nil {
fmt.Printf("error: %s", err.Error())
} else {
fmt.Printf("value: %s", b)
}
fmt.Println("")
//反射获取值,获取我tag
v := reflect.ValueOf(person)
for i := 0; i < v.NumField(); i++ {
fieldTag := v.Type().Field(i).Tag
fieldName := v.Type().Field(i).Name
fieldType := v.Field(i).Type()
fieldValue := v.Field(i).Interface()
fmt.Println("fieldTag: ",fieldTag)
fmt.Println("fieldTag.value: ",fieldTag.Get("chinaL"))
fmt.Println("fieldName: ",fieldName)
fmt.Println("fieldType: ",fieldType)
fmt.Println("fieldValue: ",fieldValue)
}
//这里是获取指针信息
kk := 66.6
fv := reflect.ValueOf(&kk)
fv.Elem().SetFloat(3.3) //修改指针的变量
fmt.Println("Elem: ",fv,kk)
//调用结构体的方法
person.test()
fmt.Println(person)
}
/*
自定义类型
1.type integer int
2.type player struct
内存中是连续存储空间
*/
type userinfo struct {
playerId string
age int16
heig int16
hobby []string
morinfo map[string]interface{}
}
type people struct {
playerId string
age int16
heig int16
hobby []string
morinfo map[string]interface{}
}
func runUserinfo() {
//1
var cardInfo userinfo
cardInfo.age = 1
cardInfo.heig = 161
cardInfo.hobby = []string{"ok", "1", "土豆"}
cardInfo.morinfo = map[string]interface{}{"1": 2, "2": "aaaaa"}
fmt.Println(cardInfo)
//2
cardInfo2 := userinfo{"66", 1, 5, []string{"1", "2"}, map[string]interface{}{"adsa": "asdsa"}}
fmt.Printf("asdasd = %v\n", cardInfo2)
//3 new 获取到的是指针
var cardInfo3 *userinfo = new(userinfo)
(*cardInfo3).playerId = "1111111111"
(*cardInfo3).age = 66
(*cardInfo3).morinfo = map[string]interface{}{"hahaha": "aaaaaa"}
(*cardInfo3).hobby = []string{"1", "ttt", "uuu"}
fmt.Println(cardInfo3)
//4
var cardInfo4 = &userinfo{
playerId: "12313",
age: 56,
heig: 6,
hobby: nil,
morinfo: nil,
}
fmt.Println(cardInfo4)
}
还没有评论,来说两句吧...