当前位置: 首页 > news >正文

岳阳网站开发报价seo资源网站 排名

岳阳网站开发报价,seo资源网站 排名,有用node.js做的网站吗,做网站公司价格多少Go不是完全面向对象的#xff0c;没有类的概念#xff0c;所以结构体应该承担了更多的责任。 结构体定义 使用 type 和 struct 关键字定义#xff1a; type Person struct { Name string Age int } 字段可以是任意类型#xff0c;包括其他结构体或指针。 字段名以大写…Go不是完全面向对象的没有类的概念所以结构体应该承担了更多的责任。 结构体定义 使用 type 和 struct 关键字定义 type Person struct { Name string Age int } 字段可以是任意类型包括其他结构体或指针。 字段名以大写开头表示可导出公开小写表示私有仅在包内可见。 实例化 方式一声明变量后赋值 var p1 Person p1.Name Alice p1.Age 30 方式二结构体字面量 p2 : Person{Name: Bob, Age: 25} // 指定字段名 p3 : Person{Charlie, 28} // 按字段顺序初始化需注意顺序 方式三使用 new 函数返回指针 p4 : new(Person) p4.Name Dave // Go自动解引用等价于 (*p4).Name 结构体的零值 当声明一个结构体变量而不初始化时其字段会被赋予对应类型的零值。 var u Person fmt.Println(u.Name) // 输出: fmt.Println(u.Age) // 输出: 0 结构体的构造函数 虽然 Go 不支持传统的构造函数但可以通过定义函数来创建并初始化结构体实例通常命名为 New【StructName】。 func NewPerson(name string, age int) Person {return Person{Name: name,Age: age,} }p : NewPerson(Laura, 32) fmt.Println(p.Name) 嵌套与匿名字段 结构体可以嵌套其他结构体实现组合类似继承 type Employee struct { Person // 匿名字段嵌入Person结构体 Position string } 这样的话Employee就嵌套了Person访问Employee的Name可以直接用e.Name而不需要e.Person.Name这就是结构体嵌套匿名字段的作用。 // 访问嵌套字段 e : Employee{Person{Eve, 40}, Engineer} fmt.Println(e.Name) // 直接访问Person的字段字段提升 结构体方法 结构体可以定义方法接收者为值或指针 Go中的方法是在函数前面加上一个接收者。比如给Person结构体定义一个方法 这里要注意如果使用值接收者修改不会影响原结构体而指针接收者会改变原结构体的值。 // 值接收者操作副本 // 指针接收者操作原对象 func main() {p : Person{Age: 29,Name: Diana,}p.Birthday()fmt.Println(p.Age) // 输出: 29 未改变p.BirthdayPointer()fmt.Println(p.Age) // 输出: 30 已改变}type Person struct {Name stringAge int }// 值接收者 func (p Person) Birthday() {p.Age 1 }// 指针接收者 func (p *Person) BirthdayPointer() {p.Age 1 } 继承 Employee 结构体嵌入了 Person结构体因此 Employee 可以直接访问 Person的字段和方法 e : Employee{Person{Eve, 40}, Engineer}fmt.Println(e.Name, e.Age)e.Birthday()fmt.Println(e.Name, e.Age)e.BirthdayPointer()fmt.Println(e.Name, e.Age) 结构体作为参数 结构体作为参数传递给函数如果是值传递函数内部对结构体的修改不会影响原变量如果是传递指针则会修改原变量。 值传递拷贝副本 直接将结构体作为值传递给函数函数内部操作的是原结构体的副本不会影响原对象。 示例 package main import fmt type Point struct { X int Y int } // 值传递修改副本不影响原对象 func modifyValue(p Point) { p.X 100 fmt.Println(Inside modifyValue:, p) // 输出 {100 2} } func main() { p : Point{X: 1, Y: 2} modifyValue(p) fmt.Println(After modifyValue:, p) // 输出 {1 2}原对象未改变 } 适用场景 结构体较小拷贝成本低。 不需要修改原结构体的逻辑。 指针传递操作原对象 传递结构体的指针内存地址函数内部操作的是原对象。 示例 package main import fmt type Point struct { X int Y int } // 指针传递修改原对象 func modifyPointer(p *Point) { p.X 100 fmt.Println(Inside modifyPointer:, *p) // 输出 {100 2} } func main() { p : Point{X: 1, Y: 2} modifyPointer(p) fmt.Println(After modifyPointer:, p) // 输出 {100 2}原对象已改变 } 适用场景 结构体较大避免拷贝开销。 需要修改原结构体的字段。 结构体字段覆盖 package mainimport fmttype Person struct {Name stringAge int }type Employee struct {Person // 嵌入Person结构体Name string // 与Person中的Name字段同名Salary float64 }func main() {e : Employee{Person: Person{Name: Alice, Age: 30},Name: Eve,Salary: 70000,}fmt.Println(e.Name) // 输出: Eve 外层Employee的Name字段fmt.Println(e.Person.Name) // 输出: Alice 内层Person的Name字段fmt.Println(e.Age) // 输出: 30fmt.Println(e.Salary) // 输出: 70000 } Employee 结构体嵌入了 Person 结构体并且两者都有一个名为 Name 的字段。当访问 e.Name 时默认访问的是 Employee 结构体的 Name 字段Eve这遮蔽了内层 Person 的 Name 字段。要访问内层 Person 的 Name 字段需要使用 e.Person.Name。 结构体方法覆盖 package mainimport fmttype Person struct {Name string }func (p Person) Greet() {fmt.Printf(Hello, Im %s from Person. , p.Name) }type Employee struct {PersonName string }func (e Employee) Greet() {fmt.Printf(Hello, Im %s from Employee. , e.Name) }func main() {p : Person{Name: Alice}e : Employee{Person: Person{Name: Bob},Name: Eve,}p.Greet() // 输出: Hello, Im Alice from Person.e.Greet() // 输出: Hello, Im Eve from Employee.// 调用嵌入结构体的方法e.Person.Greet() // 输出: Hello, Im Bob from Person. } ​Employee 结构体定义了自己的 Greet 方法覆盖了嵌入的 Person 的 Greet 方法。调用 e.Greet() 会执行 Employee 的 Greet 方法。如果需要调用被遮蔽的 Person 的 Greet 方法可以通过 e.Person.Greet() 显式调用。 结构体可见性 如果结构体的名称或字段的名称以大写字母开头那么其他包可以访问否则只能在当前包内访问。比如 type person struct { // 小写只能在包内使用 name string age int } type Student struct { // 大写公开包外可见 Name string Age int } 结构体其他特性 比较 若所有字段可比较非切片、map等结构体可直接用 或 ! 比较。 包含不可比较字段的结构体无法直接比较。 深浅拷贝 默认赋值是值拷贝深拷贝。 若字段含引用类型如切片、指针拷贝后共享底层数据。 作为Map的键需所有字段可比较 type Point struct { X, Y int } points : make(map[Point]string) points[Point{1,2}] start 匿名字段冲突 若多个匿名字段有同名字段需显式指定 type A struct { Name string } type B struct { Name string } type C struct { A; B } c : C{} c.A.Name Alice // 必须明确指定
http://www.hkea.cn/news/14326257/

相关文章:

  • 嘉兴做网站的免费的短视频推荐app
  • 网站设计收费明细表微信做网站的弊端
  • 做网站怎么保证商品是正品北京网站制作出名 乐云践新
  • 天津网站建设哪家公司好成都市住房与城乡建设厅网站
  • 简述网站的四种常见结构商贸公司网站建设极致发烧
  • 阿里巴巴网站官网建筑木模板厂家
  • 网站后台程序怎么做刘家窑做网站的公司
  • app做好了网站怎么做贾汪区住房和城乡建设局网站
  • 定制旅游网站开发wordpress适合下载站的主题
  • 注册网站流程及费用海南新政策最新
  • 重庆网站建设专家游戏推广赚佣金的平台
  • 查找网站开发者网站备案信息可以更改吗
  • 网站优化 英文网页制作与设计
  • 手机网站关键词seo开发个网站需要多少钱
  • 呼市建设官方网站ps切片做网站
  • 哪个网站建站比较好公关公司都有哪些职位
  • 中国少数民族网站建设免费免费建网站
  • 新强生产建设兵团网站php网站配置说明
  • 网站服务器证书有问题重庆专业企业建设网站
  • 网站使用方法网页设计与制作教程英语
  • 猪八戒设计网站官网seo软件下载
  • 做公司网站联系公司南昌地宝网首页
  • 网站建站平台源码服务周到的上海网站建设公
  • 石家庄的电商网站建设低价网站建设推广报价
  • 内网建立网站网站建设系统开发需要多少钱
  • 个人做商机网站如何盈利网站二维码弹窗
  • 图标网站导航制作怎么做房地产做网站
  • 微网站自助建设网站js代码
  • 加强学校网站建设和宣传工作个人电脑做网站主机
  • 女装商城网站建设h5开发网站优点