zoukankan      html  css  js  c++  java
  • GO基础(结构体)

    结构体

    结构体转JSON(结构体转换成JSON 字段必须是公有的)

    jsonByte,_ := json.Marshal(s1) //返回一个byte类型数组  s1结构体对象
    jsonStr := string(jsonByte) //把byte类型数组转json字符串
    

    JSON转结构体

    err := json.Unmarshal([]byte(str),&s2) //把json字符串转成byte类型的切片 并赋值给s1对象 需要修改里面的字段需要加&
    fmt.Println(err) //返回值为nil解析成功
    fmt.Println(s2) //返回结构体
    fmt.Printf("%T",s2) //返回结构体

    嵌套结构体转JSON

    //学生结构体
    type Student struct {
    	Id int
    	Gender string
    	Name string
    }
    
    //班级结构体
    type Class struct {
    	Title string
    	Student []Student
    }
    
    func main() {
    	c := Class{
    		Title: "001",
    		Student: make([]Student,0),//[]Student{},
    	}
    	//动态添加student
    	for i := 0;i < 10 ; i++ {
    		s := Student{
    			Id: i,
    			Gender: "男",
    			Name: fmt.Sprintf("stu_%v",i),
    		}
    		c.Student = append(c.Student,s)
    	}
    	jsonByte,_ := json.Marshal(c)
    	jsonStr := string(jsonByte)
    	fmt.Println(jsonStr)
    }
    

      

    定义结构体

    type User struct {
    //结构体名称和属性 首字母大写表示公有的 首字母小写表示私有的
    id int `json:"id"`//结构体标签 tag 用于转json之后key的
    nickname string
    mobile string
    sex string
    }
    func main(){
    //结构体是由一系列具有相同类型或不同类型的数据构成的数据集合 为值类型
    var u User //实例化结构体
    //var u1 = new(User) //实例化结构体 u1为结构体指针 可以(*u1).id 取值
    //var u2 = &User{} //结构体地址给u2 和指针类似
    //var u3 = User{id:2,nickname:"李四","mobile":"13966666666","sex":"女",} //k-v结构赋值
    //var u4 = &User{id:2,nickname:"李四","mobile":"13966666666","sex":"女",} //k-v结构赋值
    u.id = 1
    u.nickname = "张三"
    u.mobile = "13522223333"
    u.sex = "男"
    fmt.Println(u)
    return

    结构体方法

    type User struct {
    	//结构体名称和属性  首字母大写表示公有的  首字母小写表示私有的
    	id int
    	nickname string
    	mobile string
    	sex string
    }
    //定义结构体方法(个人理解就是这个方法只有这个结构体实例化后能调用)
    func (u User) PrintInfo(){
    	fmt.Println(u)
    }
    func (u *User) SetInfo(id int,nickname string){
    	u.id = id
    	u.nickname = nickname
    }
    func main(){
    	//结构体方法和接收者
    	//--没有类的概念但是可以给类型(结构体、自定义类型)定义方法,方法就是定义了者接收的函数 接收者的概念类似于其他语言的this和self
    	u := User{
    		id:1001,
    		nickname: "张三丰",
    		mobile: "15899998888",
    	}
    	u.SetInfo(5,"张无忌") //如果SetInfo不是指针类型 此处不能修改u的值
    	u.PrintInfo()
    	return 

    结构体数据类型

    type Person struct {
    	Name string
    	Sex string
    	Hobby []string
    	Map1 map[string]string
    	Struct1 struct{
    		string
    		int
    	}
    }
    
    
    func main() {
    	/*
    	结构体的字段类型可以为:基本数据类型、切片、Map以及结构体
    	如果结构体的字段类型是:指针、slice和map的零值都为nil ,即还没有分配内存空间
    	如果需要使用这样的类型 需要使用make
    	*/
    	p := Person{
    		Name: "张学友",
    		Sex: "男",
    		Hobby: []string{"唱歌","跳舞"},
    		Map1: map[string]string{"title":"MAP标题"},
    		Struct1: struct {
    			string
    			int
    		}{string: "刘德华", int:18 },
    	}
    	fmt.Println(p)
    } 

    结构体继承

    //定义动物的结构体
    type Animal struct {
    	Name string
    }
    //定义动物的结构体方法
    func (a Animal) run(){
    	fmt.Println("动物跑的方法")
    }
    //定义狗的结构体
    type Dog struct {
    	Color string
    	Animal //定义
    }
    //定义狗结构体的方法
    func (d Dog) wang(){
    	fmt.Println(d.Name+d.Color)
    
    }
    
    func main() {
    	//实例化动物结构体
    	animalObj := Animal{
    		Name: "动物",
    	}
    	//animalObj.run() //动物的动作
    
    	//实例化狗的结构体
    	dogObj := Dog{
    		Color: "红色",
    		Animal:animalObj, //这个传入结构体
    	}
    	dogObj.wang() //狗的动作
    }
    

      

      

  • 相关阅读:
    解决:Could not resolve archetype org.apache.maven.archetypes
    Spring MVC配置MyBatis输出SQL
    Spring集成MyBatis 通用Mapper以及 pagehelper分页插件
    关于SpringMVC或Struts2接受参数接收不到的原因
    配置quartz启动时就执行一次
    ajaxFileUpload进行文件上传时,总是进入error
    spring mvc注入配置文件里的属性
    java中将一个文件夹下所有的文件压缩成一个文件
    flume failed to start agent because dependencies were not found in classpath
    ubuntu不能安装pip unable to install pip in unbuntu
  • 原文地址:https://www.cnblogs.com/finnlee/p/14109832.html
Copyright © 2011-2022 走看看