首页 > 其他分享 >go复杂数据类型 结构体

go复杂数据类型 结构体

时间:2023-04-02 21:35:07浏览次数:34  
标签:user string 复杂 fmt 数据类型 lampol User go 结构

前言:

Go 语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。

通过结构体的方式来实现了面向对象 ,去除了传统的oop语法,继承,重载,构造,析构,隐藏this的特性,

仍然有面向对象三大特性,实现和面向对象方法有所不同,没有extends关键字 ,

结构体的内嵌配合接口比面向对象具有更高的扩展性和灵活性,耦合度低。

 

正文:

结构体定义格式:

type 类型名 struct {
     字段1 类型
     字段2 类型
    …
}

 

注意:结构体中的属性,可以为其赋值,也可以不赋值,是具有默认值的

 

结构体定义示例1:

 

type User struct {  // 定义结构体

name           string //定义变量

age            int

email, address string //定义多个变量

}

func main()  {

var user User         //结构体实例化

user.name = "lampol" //结构体成员赋值

user.age = 23

user.email = "[email protected]"

fmt.Println(user)         //输出 {lampol 23 [email protected] }

fmt.Printf("%T", user) //输出 main.User

}

结构体也可以通过new关键字,实例化,

使用new实例化后,变成指针结构体,返回结构体对应的指针

 

结构体定义实例化2: 使用new关键字

user := new(User)    //结构体实例化2

user.name = "lampol" //结构体成员赋值

user.age = 23

user.email = "[email protected]"

fmt.Println(user)      //输出 &{lampol 23 [email protected] }  

fmt.Printf("%T", user)  //输出 *main.User 表示指针结构体

 

结构体赋值:实例化的时候,并赋值

方式1:通过键值对

user := User{

name:  "lampol",

age:   23,

email: "[email protected]",

}

fmt.Println(user)      //输出 {lampol 23 [email protected] }

 

方式2:按顺序写

user := User{

"lampol",

23,

"[email protected]",

"北京路118号",

}

fmt.Println(user)      //输出 {lampol 23 [email protected] }

 

结构体成员类型可以为切片类型,map类型,结构体

成员类型为切片和map:

 

type User struct {

Name    string

Lan      []string   //切片类型

Address map[string]string  //map类型

}

 

使用:

var u User

u.Name = "lampol"

 

u.Lan = make([]string, 2, 5) //切片实例化

u.Lan[0] = "PHP"

u.Lan[1] = "Go"

 

u.Address = make(map[string]string) //map实例化

u.Address["pro"] = "江苏省"

u.Address["city"] = "南京市"

fmt.Println(u)  //输出:{lampol [PHP Go] map[city:南京市 pro:江苏省]}

fmt.Printf("%T", u) //输出:main.User

 

结构体成员类型为结构体,即可实现结构体的继承

 

type Address struct {

Mobile string

Pro    string

City   string

}

type User struct {

Name    string

Address Address

}

 

使用:

var u User //实例化

u.Name = "lampol"

 

u.Address.Mobile = "13355556666" //结构体成员赋值

u.Address.Pro = "江苏省"

u.Address.City = "南京市"

 

fmt.Println(u)   //输出{lampol {13355556666 江苏省 南京市}}

fmt.Printf("%T", u) //输出 main.User

 

结构体方法:

go中结构体的概念是一个个的类。既然是类,对象,那么就有各种操作方法。

 

结构体方法定义如下:在方法名前,增加结构体对象

 

type User struct {

Name string

}

// 定义结构体方法

func (u User) eat(addr string) string {

fmt.Println(u.Name, "去", addr, "eat....")

return u.Name + "去" + addr + "eat...."

}

调用:通过对象调用方法

var u User //实例化  

u.Name = "lampol"

res := u.eat("福州")  //调用方法 输出:lampol 去 福州 eat....

fmt.Println(res) //福州 lampol去福州eat....

 

 

结构体的继承:

结构体嵌套另一个匿名结构体,那么这个结构可以直接访问匿名结构体的方法,

从而实现了继承

 

结构体继承示例:

 

//父结构体

type Person struct {

Name string

Age  int

}

//父结构体方法

func (p Person) run(h int) {

fmt.Println(p.Name, p.Age, h, "run.....")

}

 

type Male struct {

Height int

Person  //将父结构体加入到子结构体成员中实现继承

}

调用:

m := Male{

Height: 170,

Person: Person{

Name: "lampol",

Age:  30,

},

}

   //继承后可直接调用父结构体方法

m.run(m.Height)   //输出 lampol 30 170 run.....


//可直接调用父结构体属性

fmt.Println(m.Name,m.Age) //输出lampol 30

 

 

结构体构造函数

结构体构造函数,就是在创建结构体对象的时候,对成员变量进行初始化

 

结构体构造函数示例:

type User struct {

Name string

Age  int

}

//结构体初始化

func newUser(name string, age int) *User {

return &User{

Name: name,

Age:  age,

}

}

调用:

user1 := newUser("lampol", 35)  //通过结构体构造函数生成对象

fmt.Println(user1)  //输出 &{lampol 35}

 

user2 := User{  //通过直接赋值的方式生成对象

Name: "yangphp",

Age: 30,

}

fmt.Println(user2)  //输出 {yangphp 30}

 

标签:user,string,复杂,fmt,数据类型,lampol,User,go,结构
From: https://www.cnblogs.com/ypeih/p/17281417.html

相关文章

  • Day 21 21.3 数据库之MongoDB
    MongoDB一般爬虫使用的数据库,是根据项目来定的。如需求方指定了使用什么数据库、如果没指定,那么决定权就在爬虫程序员手里,如果自选的话,mysql和mongodb用的都是比较多的。但不同的数据库品种有各自的优缺点,不同的场景任何一种数据库都可以用来存储,但是某种可能会更好。......
  • Day 21 21.4 数据库之Python操作MongoDB
    PyMongo在这里我们来看一下Python3下MongoDB的存储操作,在本节开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python的PyMongo库。安装:pipinstallpymongo添加文档importpymongoclient=pymongo.MongoClient(host='localhost',port=27017)"""......
  • 【入门】Go语言指针详解
    目录一、指针介绍1.1什么是指针?1.2指针有什么用?二、指针的定义三、指针操作注意事项3.1空指针3.2操作没有合法指向的内存3.3new()函数使用一、指针介绍1.1什么是指针?指针是一种存储变量内存地址的变量。Go语言中的指针与C/C++中的指针类似,但是Go语言中的指针不能......
  • Django项目的第1个应用
    1.在Django项目中,每一个应用都是一个python包,都用同一个技术规范。Django自带工具startapp,可以自动生成应用的基础目录结构。如:diango-daminstartapppollsapp2.运行后会创建一个pollsapp目录,不同之处是多一个空的views.py文件,存放视图。3.实现网页能看到视图:一是要有内容:在......
  • Demo03 数据类型 类型转换 内存溢出
    关键字数据类型java是强类型语言要求变量的使用要严格符合规定,所有变量都要先定义后才能使用 Java的数据类型分为两大类基本类型(primitivetype)引用类型(referencetype)  publicclassDemo02{   publicstaticvoidmain(String[]args){   ......
  • 【入门】Go语言结构体(struct)详解
    目录一、结构体介绍1.1什么是结构体?二、结构体定义与初始化2.1结构体定义2.2结构体初始化三、拓展3.1结构体与数组3.2结构体与切片3.3结构体与map3.4结构体作为函数参数一、结构体介绍1.1什么是结构体?结构体是一种自定义的数据类型,用于表示一组相关的数据字段。结构......
  • Golang 需要至少 5 个操作系统线程
    Golang需要至少5个操作系统线程主线程:Golang代码执行的入口点,负责初始化程序,并启动其他Goroutine。垃圾回收器线程:Golang内置了垃圾回收器,使用专门的线程来执行垃圾回收操作,回收不再使用的内存空间。CPU核心数个系统线程:每个核心需要一个系统线程来支持并发任务的执行......
  • golang 是抢占式调度 如果协程不主动让出 或者 阻塞 可以一直运行
    设置处理的器的数量为1是什么将处理器设置为1就是可以控制线程数呢?在GMP模型中,P与M一对一的挂载形式,通过设定GOMAXPROCS变量就能控制并行线程数。演示案例packagemainimport( "fmt" "runtime" "runtime/debug" "runtime/pprof" "time")funcmain()......
  • Go 语言数组和切片的区别
    原文链接:Go语言数组和切片的区别在Go语言中,数组和切片看起来很像,但其实它们又有很多的不同之处,这篇文章就来说说它们到底有哪些不同。另外,这个问题在面试中也经常会被问到,属于入门级题目,看过文章之后,相信你会有一个很好的答案。数组数组是同一种数据类型元素的集合,数组在......
  • 你不得不了解的CSS数据类型
    在我之前的开发中,CSS对于我来说,要用什么找什么,对CSS的了解并不算深入;在我刚开始深入学习CSS时,第一个遇到的就是CSS数据类型,我听说过JS、TS的数据类型,CSS怎么也有数据类型?但是随着我对CSS数据类型的了解,CSS的大门也在缓缓为我打开!!!什么是CSS数据类型?引用《CSS新世界》中的介绍:CS......