Go 创建结构体实例的四种方式

    技术2022-07-11  83

    创建结构体实例的四种方式

    方式 1-直接声明 : var person Person(见上一篇)方式 2-{ } 案例演示: var person Person = Person{} type Person struct{ Name string Age int } func main() { p2 := Person{"mary", 20} // p2.Name = "tom" // p2.Age = 18 fmt.Println(p2) }


    方式 3-new 案例: var person *Person = new (Person) var p3 *Person= new(Person) (*p3).Name = "smith (*p3).Age = 30 fmt.Println(*p3) 因为p3是一个指针,因此标准的给字段赋值方式: (*p3).Name = "smith"也可以这样写 p3.Name = "smith"


    p3.Name = "john" p3.Age = 29 fmt.Println(*p3)

     

    原因: go的设计者 为了程序员使用方便,底层会对 p3.Name = "smith" 进行处理会给 p3 加上 取值运算 (*p3).Name = "smith"


    方式4-&{} 案例: var person *Person = &Person{} var person *Person = &Person{"mary", 60} -- 或者var person *Person = &Person{} 因为person 是一个指针,因此标准的访问字段的方法  (*person).Name = "scott" go的设计者为了程序员使用方便,也可以 person.Name = "scott"  原因和上面一样,底层会对 person.Name = "scott" 进行处理, 会加上 (*person)   (*person).Name = "scott" (*person).Age = 88 person.Name = "jm" person.Age = 10
    说明: 第 3 种和第 4 种方式返回的是 结构体指针。结构体指针访问字段的标准方式应该是: (*结构体指针).字段名比如 (*person).Name = "tom" 3) 但 go 做了一个简化也支持 结构体指针.字段名, 比如 person.Name = "tom"。更加符合程序员使用的习惯,go 编译器底层 对 person.Name 做了转化 (*person).Name。
    Processed: 0.015, SQL: 9