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

html企业网站源码下载潍坊seo教程

html企业网站源码下载,潍坊seo教程,科技 响应式网站模板,惠州学院网站建设结构体嵌套 golang中没有类,他通过结构体来实现其他编程语言中类的相关功能。 具名结构体 基本语法 基本语法 golang的结构体嵌套特别简单。 type 结构体类型1 struct{字段 类型1字段 类型2 }//这样就实现了结构体的嵌套 type 结构体类型2 struct{字段 类型1字…

结构体嵌套

golang中没有类,他通过结构体来实现其他编程语言中类的相关功能。

具名结构体

基本语法

基本语法

golang的结构体嵌套特别简单。

type 结构体类型1 struct{字段 类型1字段 类型2
}//这样就实现了结构体的嵌套
type 结构体类型2 struct{字段 类型1字段 类型2字段 结构体类型1
}

举例

package struct_knowledgeimport "fmt"type Worker struct{salary intprofession string
}
//具名嵌套结构体
type Human struct{Name stringAge int Work Worker
}func (w Worker) GetSalary(){fmt.Printf("工资为%d\n",w.salary)
}//访问具名结构体
func VisitNestingStruct(){var human Human//访问字段/*报错:human.salary undefined(type Human has no filed or method GetSalary)*///human.salary = 25//通过字段连锁访问human.Work.salary = 20fmt.Printf("结构体的实例为%v\n",human)//通过字面量访问human = Human{Age: 20,Name: "张三",Work: Worker{salary: 1000,profession: "no work",},}fmt.Printf("结构体的实例为%v\n",human)//通过位置赋值human = Human{"lisa",45,Worker{salary: 10000,profession: "waiter",},}fmt.Printf("结构体的实例为%v\n",human)// 调用方法/*报错:human.GetSalary undefined(type Human has no filed or method GetSalary)*/// human.GetSalary()human.Work.GetSalary()
}

结果

结构体的实例为struct_knowledge.Human{Name:"", Age:0, Work:struct_knowledge.Worker{salary:20, profession:""}}
结构体的实例为struct_knowledge.Human{Name:"张三", Age:20, Work:struct_knowledge.Worker{salary:1000, profession:"no work"}}
结构体的实例为struct_knowledge.Human{Name:"lisa", Age:45, Work:struct_knowledge.Worker{salary:10000, profession:"waiter"}}
工资为10000

访问规则

具名嵌套结构体的访问只能通过

嵌套结构体字段名.字段
嵌套结构体字段名.方法()

不能通过最外层结构体直接访问。

举例

type Worker struct{salary intprofession string
}
//具名嵌套结构体
type Human struct{Name stringAge int Work Worker
}

Human实例不能直接访问Worker实例的字段或方法,需要通过

Human实例.Work.字段
Human实例.Work.方法

匿名结构体

基本语法

就是不写用字段接收嵌套结构体而是直接写类型名,例如

type 结构体类型A struct{字段1 类型1字段2 类型2...
}type 结构体类型B struct{字段1 类型1结构体类型A
}

举例

package struct_knowledgeimport "fmt"type StructA struct{name stringage int 
}type StructB struct{price int StructA
}func VisitStructB(){var st StructBfmt.Printf("嵌套结构体的值为%#v\n",st)
}

结果

嵌套结构体的值为struct_knowledge.StructB{price:0, StructA:struct_knowledge.StructA{name:"", age:0}}

访问规则

名称访问

匿名结构体如果我们将他按照匿名字段理解,那么他就可以解析成如下形式:

type 结构体类型A struct{字段1 类型1字段2 类型2...
}type 结构体类型B struct{字段1 类型1结构体类型A
}
//按照匿名字段理解
type 结构体类型B struct{字段1 类型1结构体A 结构体类型A
}

所以我们仍然可以通过如下形式修改和访问:

结构体B实例.结构体A.字段
结构体B实例.结构体A.方法()

举例

package struct_knowledgeimport "fmt"type StructA struct{name stringage int 
}type StructB struct{price int StructA
}/*我们可以按照访问具名结构体的方法访问匿名结构体的名字就是 类型同名
*/
func VisitStructByName(){var st StructB//连锁访问st.StructA.age = 25fmt.Printf("结构体的实例为%#v\n",st)//字面量访问st = StructB{price: 1000,StructA: StructA{age:25,name:"lisi",},}fmt.Printf("结构体的实例为%#v\n",st)//位置访问st = StructB{1000,StructA{age:30,name:"sam",},}fmt.Printf("结构体的实例为%#v\n",st)
}

结果

结构体的实例为struct_knowledge.StructB{price:0, StructA:struct_knowledge.StructA{name:"", age:25}}
结构体的实例为struct_knowledge.StructB{price:1000, StructA:struct_knowledge.StructA{name:"lisi", age:25}}
结构体的实例为struct_knowledge.StructB{price:1000, StructA:struct_knowledge.StructA{name:"sam", age:30}}
直接访问

匿名结构体与具名结构体最大的不同就是:

我们可以直接通过外层结构体访问匿名结构体的字段或方法(前提没有产生同名冲突)

举例

package struct_knowledgeimport "fmt"type StructA struct{name stringage int 
}type StructB struct{price int StructA
}func (c StructA) GetAge(){fmt.Printf("StructA的年龄为%v\n",c.age)
}func VisitStructByNoName(){var st StructB//在不出现名字冲突的情况下,外层结构体可以直接访问匿名结构体的字段和方法st.age = 25st.GetAge()fmt.Printf("结构体的实例为%#v\n",st)//但仅限于这种成员访问,字面量和位置就不适用/*报错:unknow field age in struct literal of type StructBunknow field name in struct literal of type StructB*/// st = StructB{// 	price: 1000,// 	age:30,// 	name:"lisa",// }
}

结果

StructA的年龄为25
结构体的实例为struct_knowledge.StructB{price:0, StructA:struct_knowledge.StructA{name:"", age:25}}

字段冲突

这种情况主要出现在匿名结构体中,因为同一结构体中字段唯一,所以结构体中不能出现同名字段。

但是匿名结构体嵌套后,由于他可以匿名访问,所以就产生了字段和方法冲突。

这也是匿名结构体允许具名访问的原因。

解决方案

当出现字段冲突时,访问匿名结构体的同名字段或方法需要采用具名访问。

举例

package struct_knowledgeimport "fmt"type StructOne struct{name string age intprice int
}type StructTwo struct{name string age int
}type StructThree struct{name stringStructOneStructTwo
}func VisitStructThree(){var st StructThreefmt.Printf("结构体的实例为%#v\n",st)//访问不同名字段,可以直接匿名访问st.price  = 20/*但是访问同名字段或方法,就需要指明结构体如果最外层结构体有就访问的是最外层*/st.name = "lisa"/*如果访问同名字段或方法,但最外层结构体也没有就会报错ambiguous selector st.age*/// st.age = 25
}

结果

结构体的实例为struct_knowledge.StructThree{name:"", StructOne:struct_knowledge.StructOne{name:"", age:0, price:0}, StructTwo:struct_knowledge.StructTwo{name:"", age:0}}
结构体的实例为struct_knowledge.StructThree{name:"lisa", StructOne:struct_knowledge.StructOne{name:"", age:0, price:20}, StructTwo:struct_knowledge.StructTwo{name:"", age:0}}
冲突字段访问规则

1.如果要访问的同名字段或者方法顶层有,直接访问则采用顶层的字段或方法。

2.如果要访问的同名字段或者方法顶层没有,直接访问就会报错。

# ambiguous的中文含义:模糊不清的,模棱两可的
ambiguous selector st.xxx
解决字段冲突问题

要访问嵌套结构体的同名字段或者方法,可以采用具名访问法,例如

外层结构体实例.匿名结构体类型.字段
外层结构体实例.匿名结构体类型.方法()
http://www.dtcms.com/wzjs/100928.html

相关文章:

  • 网站建设后台系统有哪些网络推广公司网站
  • 中国建设招标网是什么网站最近的新闻大事
  • 工程建设标准最新查询网站做网络推广要学些什么
  • 温江做网站哪家好网站怎么弄
  • 服装搭配网站建设策划书说说seo论坛
  • 静态网页模板生成工具优化设计单元测试卷
  • 怎么创建网站挣钱网络营销策略有哪几种
  • 做网站的主题网站建设全网营销
  • 硬件开发文档模板湖南网络优化
  • 打开网站说建设中是什么问题?seo关键词快速排名介绍
  • 广州网页设计培训学校2022网站seo
  • 自己如何在家做网站枣庄网站seo
  • 我想做个网站怎么弄网页设计和网站制作
  • 购物网站答辩ppt怎么做南京网络优化培训
  • 西安美食seo关键词快速排名
  • 建设旅游电子商务网站的目的谷歌地图下载
  • 开发网站价格安徽百度推广怎么做
  • 深圳快速网站制作服务外链生成网站
  • 软考高级东莞网络推广优化排名
  • 哈尔滨网站建设维护seo招聘信息
  • 绥化网站建设seo关键字怎么优化
  • 视频制作软件手机版seo流量
  • 网站怎么做是满屏关于手机的软文营销
  • 网站建设案例渠道兴安盟新百度县seo快速排名
  • 做的网站很卡是什么原因呢长春网站公司哪家好
  • 浙江网站建设制作流程软文营销是什么意思
  • 中国建设建行网站今天最火的新闻头条
  • 洛阳做网站公司有哪些站长素材音效下载
  • 做交流网站怎么建设自己的网站
  • seo网站制作app优化方案