1.struct 简洁 这个的struct和C语言的很相似,模拟出class的功能,但是不完全的!没有构造函数等! 2.struct的申明
package main import "fmt" type Person struct { Age int Name string } func main() { //初始化两种 a := Person{} a.Age = 2 a.Name = "widuu" fmt.Println(a) b := Person{ Age: 24, Name: "widuu", } fmt.Println(b) }3.go指针操作 如下我们要对数值进行改变,先要取内存地址,然后再内存地址上改变他的引用
package main import "fmt" type Person struct { Age int Name string } func main() { b := &Person{ Age: 24, Name: "widuu", } fmt.Println(b) G(b) fmt.Println(b) } func G(per *Person) { per.Age = 15 fmt.Println(per) }4.匿名结构 (1)匿名内部结构的使用
func main() { a := struct { name string Age int }{ name: "widuu", Age: 19, } fmt.Println(a) }(2)匿名内部结构使用2
package main import "fmt" type Person struct { Age int Name string Member struct { phone, City string } } func main() { a := Person{Age: 16, Name: "widuu"} a.Member.phone = "13800000" a.Member.City = "widuuweb" fmt.Println(a) }(3)匿名类值不需要数据名称、在赋值的时候两个结构必须是一样的
package main import "fmt" type Person struct { string int } func main() { a := Person{"joe", 19} var b Person b = a fmt.Println(b) }5.嵌入结构 1.嵌入式结构模拟其他程序有个继承的概念,只是概念哦
package main import "fmt" type Person struct { Name string Age int } type student struct { Person work string } func main() { //实例化时 如果嵌入式的结构没有数据结构的名字 就默认是类型名字Person:Person a := student{Person: Person{Name: "widuu", Age: 19}, work: "IT"} fmt.Println(a) }2.结构方法
package main import "fmt" type A struct { Name string //这个是共有的大写 如果是小写的name就包内可以用私有的 } type B struct { Name string } func main() { a := A{} b := B{} a.print() b.print() } //通过type不同,来取相同的方法的名称 func (a *A) print() { fmt.Println("A") } func (b *B) print() { fmt.Println("B") }一个小测试大家解释一下为什么?
package main import "fmt" type Widuu int func main() { var w Widuu w.G(100) fmt.Println(w) } func (a *Widuu) G(num int) { *a += Widuu(num) }
发表评论 取消回复