golang基础--strcut结构体
结构体struct类似python语言中的类class,结构体类的元素可以是一个变量,或者函数或者其它的类型,好比python的属性和方法。
// struct结构体,类似python语言中的class类
package main
import "fmt"
type person struct { //定义一个strcut
Name string
Age int
} func main() {
a := person{} //赋值给一个变量a
fmt.Println(a)
a.Name = "faily" //为结构体赋值
a.Age = 28
fmt.Println(a)
}
/*输出结果
{ 0} //空结构体时,int元素为0
{faily 28}
*/
简单的方式进行结构体的初始化
package main
import "fmt" type person struct { //定义一个strcut
Name string
Age int
}
func main() {
a := person{ //也可以这样初始化一个结构体
Name: "msy",
Age: 27,
}
fmt.Println(a)
}
struct也是一个
值类型,也就是说传递的时候,拷贝的是值,正常途径无法改变结构内的值,需通过指针的方式进行修改package main
import "fmt" type person struct { //定义一个strcut
Name string
Age int
} func main() {
a := person{ //初始化结构体
Name: "msy",
Age: 27,
}
fmt.Println("1", a)
A(a)
fmt.Println("3", a)
B(&a) //指针引用
fmt.Println("4", a) } func A(per person) { // 参数引用person--结构体
per.Age = 13 //初始化person属性的值
fmt.Println("2", per)
} func B(per *person){ //传递指针
per.Age =13
fmt.Println("2",per)
}
/*输出
初始化: 1 {msy 27}
修改A: 2 {msy 13}
修改失败: 3'{msy 27}
修改B: 2 {msy 13}
修改成功: 3"{msy 13}
*/
推荐结构体初始化时,使用结构体指针,修改的时候更加方便
package main
import "fmt" type person struct { //定义一个strcut
Name string
Age int
} func main() {
a := &person{ //初始化结构体,建议使用结构的指针
Name: "msy",
Age: 27,
}
a.Name = "MYF" //这种方式就可以直接修改结构体
fmt.Println("1", a)
A(a) //此时就可以直接修改结构体
B(a)
fmt.Println("3", a)
} func A(per *person) { //传递指针
per.Age = 13 //初始化person属性的值
fmt.Println("2", per)
} func B(per *person) { //传递指针
per.Age = 100
fmt.Println("2", per)
} /*输出
1 &{MYF 27}
2 &{MYF 13}
2 &{MYF 100}
3 &{MYF 100}
*/
匿名结构:没有名字的结构
package main
import "fmt" func main() {
a := &struct { //指向结构体指针
Name string
Age int
}{ //直接初始化
Name: "moshaoying",
Age: 27,
}
fmt。Println(a)
} /*输出
&{moshaoying 27}
*/
嵌套匿名结构体,初始化方式
package main
import "fmt" type person struct { //嵌套匿名结构
Name string
Age int
Content struct {
Phone int
Addr string
}
} func main() {
a := person{Name: "moshaoying", Age: 22}
a.Content.Phone = 13636269334 //嵌套匿名结构体初始化方式
a.Content.Addr = "shanxi,xian" fmt.Println(a)
} /*输出
{moshaoying 22 {13636269334 shanxi,xian}}
*/
结构体比较: 命名是结构体的一部分,所以只有当结构体命名相同时才可以进行比较
package main
import "fmt" type person struct { //嵌套匿名结构
Name string
Age int
} type person1 struct {
Name string
Age int
} func main() {
a := person{Name: "moshaoying", Age: 22}
b := person1{Name: "moshaoying", Age: 22}
c := person{Name: "moshaoying", Age: 22}
d : = person{Name: "moshaoying", Age: 21}
fmt.Println(a == b)
fmt.Println(a == c)
fmt.Println(a == d)
} /*输出报错
a=b invalid operation: a == b (mismatched types person and person1)
a=c true
a=d false
*/
结构体没有python类的继承,但是结构体也会有类似的功能,结构体嵌套,达到继承其它结构体的属性
package main
import "fmt" type human struct {
Sex int
}
type person struct { //结构体继承(嵌套)
human
Name string
Age int
} func main() {
a := person{Name: "failymao", Age: 22, human: human{Sex: 250}} //第一种方式,注意原理
fmt.Println(a)
//第二种方式
a.Name = "allen"
a.Age = 29
a.Sex = 222
fmt.Println(a)
} /*输出报错
第一种方式: {{250} failymao 22}
第二种方式: {{222} allen 29}
*/
golang基础--strcut结构体的更多相关文章
- Go语言基础之结构体
Go语言基础之结构体 Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在G ...
- 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct
https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...
- GO学习-(13) Go语言基础之结构体
Go语言基础之结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. ...
- 六、golang中的结构体和方法、接口
结构体: 1.用来自定义复杂数据结构 2.struct里面可以包含多个字段(属性) 3.struct类型可以定义方法,注意和函数的区分 4.strucr类型是值类型 5.struct类型可以嵌套 6. ...
- Go基础之--结构体和方法
结构体的定义 结构体是将零个或者多个任意类型的命令变量组合在一起的聚合数据类型.每个变量都叫做结构体的成员. 其实简单理解,Go语言的结构体struct和其他语言的类class有相等的地位,但是GO语 ...
- golang 使用匿名结构体的问题
golang允许使用匿名结构体,形如 type Test struct { param1 struct { param2 string } } 一般在使用的时候可以直接这样初始化 a := Test{ ...
- 【Go】语法基础之结构体
结构体的定义很简单: type Vertex struct { X, Y float64 } 可以理解为多个变量的集合. 结构体的使用: 1.直接使用: v := Vertex{1, 2} 或 var ...
- Go语言基础之结构体(面向对象编程上)
1 自定义类型和类型别名 1.1 自定义类型 Go语言中可以基于一些基本的数据类型,使用type关键字定义自定义类型的数据 . 自定义类型定义了一个全新的类型,该新类型具有基本数据类型的特性.自定义类 ...
- Golang通脉之结构体
Go语言中的基础数据类型可以表示一些事物的基本属性,但是要表达一个事物的全部或部分属性时,这时候再用单一的基本数据类型明显就无法满足需求了,Go语言提供了一种自定义数据类型,可以封装多个基本数据类型, ...
随机推荐
- 获得用户完整的autodiscover配置文件
outlook 2016 无法自定义配置exchange邮箱,需要使用自动发现来配置,但在配置过程中,经常出现异常的错误,导致无法通过. 之前的文章介绍了通过使用注册表指定autodiscover.x ...
- Python学习---基于JQuery的Ajax实现[快捷+底层$.ajax]
快捷API <1>$.get(url, [data], [callback], [type]) <2>$.post(url, [data], [callback], [type ...
- c++计算器后续(5)
自娱自乐: 大概是重新开始玩qt,然后MFC和第四步附加的作业大概不会去玩了.以上. QT相关: 阶段一: 原来作业里举了qt和mfc这两个做界面的东西,网上都说qt容易上手,学了mfc再来看qt简直 ...
- PhoneGap 白名单安全机制 navigator.app 加载外部页面返回以及退出介绍
一. Phonegap 白名单安全机制 Phonegap应用的页面大多存在于本地,但有时需要加载外部的Web页面到应用内置的浏览器 视图中已完成特定的应用功能,出于安全性考虑,PhoneGap 设立了 ...
- Ubuntu下命令行安装jdk,android-studio,及genymotion虚拟机来进行android开发
安装JDK 从oracle官网下最新版的linux64位的jdk包(现在最新为jdk-8u92-linux-x64.tar.gz) 命令如下 新建文件夹-解压 sudo mkdir /usr/lib/ ...
- 使用loader打包静态文件-样式2
这篇我们了解下css-loader常用的配置项,要配置的话,use里面就不再是一个字符串了 // 打包模块不知道该怎么办,就去模块配置里面该怎么办 module: { // 规则 rules: [{ ...
- chrome下载离线安装包的方法
https://www.google.com/chrome/browser/desktop/index.html?system=true&standalone=1,一般默认下载稳定版,如果需要 ...
- 2、Android-UI(常用控件)
2.1.如何编写程序页面 Android中有许多编写程序的方式可供选择 Android Studio和Eclipse中都提供了响应的可视化编辑器 可以直接再进行拖动创建布局 推荐使用手动编写方式进行开 ...
- 修改Xcode工程名称
概述 有的时候需要在现有的项目上面开发一个新的项目,如果新建工程的话,就比较麻烦了,所以一般是直接现有的工程上面直接修改名字步骤如下: 1.修改工程名字 在这里修改完之后,会弹出一个对话框,点击Ren ...
- 谷歌浏览器linux,windows下载
https://www.chromedownloads.net/ 提取码自己行提取rpm安装包