移动局域网ip做网站徐州招聘网站哪个好
2026/1/1 16:59:53 网站建设 项目流程
移动局域网ip做网站,徐州招聘网站哪个好,兰州网络营销推广价格,哪家网络公司做网站好文章目录golang 中类的封装类的继承类的多态interface{} 万能数据类型反射1. 变量内置 pair 结构2. 反射 reflect 机制3. 结构体标签4. 结构体标签在 Json 中的应用golang 中类的封装 package mainimport fmt// 类名首字母大写#xff0c;表示其他包也可以访问 t…文章目录golang 中类的封装类的继承类的多态interface{} 万能数据类型反射1. 变量内置 pair 结构2. 反射 reflect 机制3. 结构体标签4. 结构体标签在 Json 中的应用golang 中类的封装packagemainimportfmt// 类名首字母大写表示其他包也可以访问typePersonstruct{Namestring// 属性名首字母大写表示该属性对外能够访问否则只能类的内部访问AgeintSexstring}func(this*Person)Show(){fmt.Println(姓名,this.Name,年龄,this.Age,性别,this.Sex)}func(this*Person)GetName()string{returnthis.Name}func(this*Person)SetName(name string){// this是调用方法对象指针this.Namename}func(thisPerson)SetName2(name string){// this是调用方法对象的一个副本this.Namename}funcmain(){p:Person{Name:张三,Age:18,Sex:男,}p.Show()fmt.Println()p.SetName2(honghong)p.Show()fmt.Println()p.SetName(honghong)p.Show()}注意go 语言中类名、属性、方法的首字母是否大写都与其是否能被外部其它包访问有关否则只能在本包内访问。类的继承packagemainimportfmttypeHumanstruct{namestringsexstring}func(this*Human)Eat(){fmt.Println(Human Eating...)}func(this*Human)Walk(){fmt.Println(Human Walking...)}// // 继承定义 SuperMan 继承自 HumantypeSuperManstruct{// 表示继承自HumanHuman levelint}// 重写 eat 方法func(this*SuperMan)Eat(){fmt.Println(SuperMan Eating...)}// 增加 Fly 方法func(this*SuperMan)Fly(){fmt.Println(SuperMan Flying...)}funcmain(){h:Human{zhangsan,male}h.Eat()h.Walk()fmt.Println()// 定义子类对象//s : SuperMan {Human{lisi, female}, 2}vars SuperMan s.namelisis.sexfemales.level2s.Eat()s.Walk()s.Fly()}类的多态packagemainimportfmt// interfacetypeAnimalinterface{Sleep()GetColor()stringGetType()string}// 具体的类typeCatstruct{Colorstring}func(this*Cat)Sleep(){fmt.Println(Cat is sleeping)}func(this*Cat)GetColor()string{returnthis.Color}func(this*Cat)GetType()string{returnCat}// 具体的类typeDogstruct{Colorstring}func(this*Dog)Sleep(){fmt.Println(Dog is sleeping)}func(this*Dog)GetColor()string{returnthis.Color}func(this*Dog)GetType()string{returnDog}funcshowAnimal(animal Animal){fmt.Println(animal.GetType(),animal.GetColor())}funcmain(){// 多态体现同一个接口类型的变量可以指向不同的实现类对象varanimal Animal animalCat{white}animal.Sleep()animalDog{black}animal.Sleep()fmt.Println()// 多态体现cat:Cat{white}dog:Dog{black}showAnimal(cat)showAnimal(dog)}多态的要素有一个接口子类要实现接口的所有接口方法少一个都不行父类的引用指向子类的具体数据类型interface{} 万能数据类型interface{} 空接口int、string、float64… 均实现了 interface{}可以用interface{} 类型代表任何数据类型interface 用于类型断言packagemainimportfmt// interface{} 作为万能数据类型funcmyFun(argsinterface{}){fmt.Println(myFun!)fmt.Println(args)// 提供 interface{} 类型断言value,ok:args.(string)if!ok{fmt.Println(args is not string)}else{fmt.Println(args is string)fmt.Println(value ,value)}}funcmain(){myFun(11)fmt.Println()myFun(hello)fmt.Println()myFun(true)fmt.Println()myFun(1.234)}反射1. 变量内置 pair 结构反射是通过 pair 结构来得到 type。2. 反射 reflect 机制通过 reflect 包动态获取 type 和 valuee.g.1packagemainimport(fmtreflect)funcPrintNum(arginterface{}){fmt.Println(type is: ,reflect.TypeOf(arg))fmt.Println(value is: ,reflect.ValueOf(arg))}funcmain(){varnumfloat641.235PrintNum(num)}e.g.2packagemainimport(fmtreflect)typeUserstruct{IdintNamestringAgeint}func(this User)Call(){fmt.Println(user call...)}funcmain(){u:User{1,honghong,18}PrintFieldsAndValues(u)}funcPrintFieldsAndValues(inputinterface{}){// 获取 input 的typeinputtype:reflect.TypeOf(input)fmt.Println(inputtype is: ,inputtype)// 获取 input 的valueinputvalue:reflect.ValueOf(input)fmt.Println(inputvalue is: ,inputvalue)fmt.Println()// 通过 type 获取里面的字段// 1. interface获取 type通过 type 获取 NumFields, 遍历字段// 2. 得到每个 field数据类型// 3. 通过 field 有一个 Interface() 方法得到 valuefori:0;iinputtype.NumField();i{field:inputtype.Field(i)value:inputvalue.Field(i).Interface()fmt.Printf(%v: %s %v\n,field.Type,field.Name,value)}fmt.Println()// 通过 type 获取方法fori:0;iinputtype.NumMethod();i{method:inputtype.Method(i)fmt.Printf(%s: %v\n,method.Name,method.Type)}}3. 结构体标签packagemainimport(fmtreflect)typeresumestruct{Namestringinfo:name doc:我的名字sexstringinfo:sex doc:性别}funcPrintTag(datainterface{}){t:reflect.TypeOf(data).Elem()fori:0;it.NumField();i{tagInfo:t.Field(i).Tag.Get(info)tagDoc:t.Field(i).Tag.Get(doc)fmt.Println(tag info:,tagInfo, tag doc:,tagDoc)}}funcmain(){varr resumePrintTag(r)}4. 结构体标签在 Json 中的应用packagemainimport(encoding/jsonfmt)typeMoviestruct{Titlestringjson:titleYearintjson:yearPricefloat64json:rmbActors[]stringjson:actors}funcmain(){movie:Movie{唐顿庄园,2000,9.5,[]string{tom,jerry,lucy}}// 编码 movie 结构体———— jsonjsonStr,err:json.Marshal(movie)iferr!nil{fmt.Println(json.Marshal err:,err)return}fmt.Printf(%s\n,jsonStr)// 解码 json ———— movie 结构体myMovie:Movie{}errjson.Unmarshal(jsonStr,myMovie)iferr!nil{fmt.Println(json.Unmarshal err:,err)return}fmt.Printf(%v\n,myMovie)}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询