一、概述

1、结构体

一个程序就是一个世界,有很多对象(变量)

  1. Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。
  2. Golang没有类(class),Go语言的结构体(struct)和其它编程语言的类(class)有同等的地位。
  3. Golang面向对象编程非常简洁,去掉了传统OOP语言的继承、方法重载、构造函数和析构函数、隐藏的this指针等等。
  4. Golang仍然有面向对象编程的继承、封装和多态的特性,只是实现的方式和其他OOP语言不一样,比如继承:Golang没有extends关键字,继承是通过匿名字段来实现。
  5. Golang面向对象(OOP)很优雅,OOP本身就是语言类型系统(type system)的一部分,通过接口(interface)关联,耦合性低,也非常灵活。在Golang中面向接口编程是非常重要的特性。
package main
import (
	"fmt"
)

type Cat struct {
	Name string
	Age int
	Color string
}

func main(){
	var cat1 Cat
	cat1.Name="小白"
	cat1.Age=3
	cat1.Color="白色"
	fmt.Println("cat1=",cat1)
	fmt.Println("cat1 Name=",cat1.Name)
}

结构体是自定义的数据类型,代表一类事物

声明结构体
type 结构体名称 struct {
    field1 type
    field2 type
}
例:
type Cat struct {
	Name string
	Age int
	Color string
}
  1. 字段的类型可以为:基本类型,数组或引用类型
  2. 在创建一个结构体变量后,如果没有给字段赋值,都对应一个零值(默认值)
  3. 数组的默认值和它的元素类型相关,score[3]int 则为[0,0,0]
  4. 指针,slice,map的零值都是nil,即还没有分配内存空间
  5. 不同结构体变量的字段是独立,互不影响,一个结构体变量字段的更改,不影响另外一个。
package main
import (
	"fmt"
)
func main(){
	var p1 Person
	fmt.Println("p1=",p1)
	p1.Name="小明"
	p1.Age=10
	p1.slice= make([]int,10)
	p1.map1 = make(map[string]string)
	p1.map1["k1"] = "v1"
	fmt.Println("p1=",p1)

}
type Person struct {
	Name string
	Age int
	map1 map[string]string
	slice []int
	ptr *int //指针
}

干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!

本文出至:学新通