Go基础知识点(十一) | 青训营笔记

115 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第13天.

go结构体初始化:

import "fmt"

func main() {
   type Person struct {  //创建一个结构体
      id    int
      name  string
      age   int
      email string
   }
   var tom Person
   fmt.Println("未初始化的tom:", tom)

   tom = Person{
      id:    101,
      name:  "tom",
      age:   12,
      email: "123@gemail.com",
   }
   fmt.Println("初始化后的tom:", tom)

   //按顺序简洁初始化
   var amy Person
   amy = Person{
      102,
      "amy",
      11,
      "112@qq.com",
   }
   fmt.Println("amy:", amy)

   //也可以部分初始化
   var jie Person
   jie = Person{
      id:   103,
      name: "jie",
   }
   fmt.Println("jie:", jie)
}

image.png

go结构体指针:

type Person struct {
   id   int
   name string
   age  int
}
var tom Person
var p_person *Person
tom = Person{
   101,
   "tom",
   12,
}
p_person = &tom
fmt.Println("tom:", tom)
fmt.Printf("p_person:%p\n", p_person)
fmt.Println("*p_person:", *p_person)
image.png

使用new关键字创建结构体指针:

我们可以通过new关键字对结构体进行实例化,得到结构体的地址

type Person struct {
   id   int
   name string
   age  int
}
var tom = new(Person)
fmt.Printf("tom类型:%T\n", tom)`
fmt.Printf("tom指针:%p\n", tom)
//访问结构体成员,使用.符号关键字
(*tom).id = 101
(*tom).name = "tom"
(*tom).age = 12
//我们也可以省略*符号,直接按照下面的格式写
//tom.id = 101
//tom.name = "tom"
//tom.age = 12
fmt.Printf("*tom:%v\n", *tom)
image.png

go结构体作为函数参数:

go结构体可以像普通变量一样,作为函数的参数,传递给函数,分为两种情况:

1.直接传递结构体,这里是一个副本(拷贝),在函数内部并不会改变外面结构体的内容;

2.传递结构体指针,这时在函数内部,能够改变外部结构体内容.

import "fmt"

type Per struct {
   id   int
   name string
}

func main() {
   tome := Per{id: 101, name: "tome"}
   per := &tome
   fmt.Println(tome)
   showPerson(tome)
   fmt.Println(tome)
   fmt.Println("使用地址作为参数-----------------------------")
   fmt.Println(tome)
   showPerson2(per)
   fmt.Println(tome)
}
func showPerson(per Per) {
   //传入的是值,只是拷贝的副本,改变它的内容,并不会改变外部结构体中的内容
   per.id = 102
   per.name = "amy"
   fmt.Println(per)

}
func showPerson2(per *Per) {
   //传入的是per的地址,会改变外部结构体中的内容
   per.id = 102
   per.name = "amy"
   fmt.Printf("%v\n", *per)
}
image.png

明天继续加油~