• 结构体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结构体的更多相关文章

  1. Go语言基础之结构体

    Go语言基础之结构体 Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在G ...

  2. 将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. ...

  3. GO学习-(13) Go语言基础之结构体

    Go语言基础之结构体 Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. ...

  4. 六、golang中的结构体和方法、接口

    结构体: 1.用来自定义复杂数据结构 2.struct里面可以包含多个字段(属性) 3.struct类型可以定义方法,注意和函数的区分 4.strucr类型是值类型 5.struct类型可以嵌套 6. ...

  5. Go基础之--结构体和方法

    结构体的定义 结构体是将零个或者多个任意类型的命令变量组合在一起的聚合数据类型.每个变量都叫做结构体的成员. 其实简单理解,Go语言的结构体struct和其他语言的类class有相等的地位,但是GO语 ...

  6. golang 使用匿名结构体的问题

    golang允许使用匿名结构体,形如 type Test struct { param1 struct { param2 string } } 一般在使用的时候可以直接这样初始化 a := Test{ ...

  7. 【Go】语法基础之结构体

    结构体的定义很简单: type Vertex struct { X, Y float64 } 可以理解为多个变量的集合. 结构体的使用: 1.直接使用: v := Vertex{1, 2} 或 var ...

  8. Go语言基础之结构体(面向对象编程上)

    1 自定义类型和类型别名 1.1 自定义类型 Go语言中可以基于一些基本的数据类型,使用type关键字定义自定义类型的数据 . 自定义类型定义了一个全新的类型,该新类型具有基本数据类型的特性.自定义类 ...

  9. Golang通脉之结构体

    Go语言中的基础数据类型可以表示一些事物的基本属性,但是要表达一个事物的全部或部分属性时,这时候再用单一的基本数据类型明显就无法满足需求了,Go语言提供了一种自定义数据类型,可以封装多个基本数据类型, ...

随机推荐

  1. WINDBG解决cpu占高的问题

    https://blog.csdn.net/yenange/article/details/62886988 https://blog.csdn.net/zhushentian/article/det ...

  2. 沉淀再出发:java中的CAS和ABA问题整理

    沉淀再出发:java中的CAS和ABA问题整理 一.前言 在多并发程序设计之中,我们不得不面对并发.互斥.竞争.死锁.资源抢占等等问题,归根到底就是读写的问题,有了读写才有了增删改查,才有了所有的一切 ...

  3. Kinaba 简单画图

    此片文章简单介绍如何在kinaba 上画图. 如果你,还没有搭建ELK 请参考:ELK日志分析平台搭建全过程 本文参考:http://www.cnblogs.com/hanyifeng/p/58607 ...

  4. Windows 下的内存泄漏检测方法

    在 Windows 下,可使用 Visual C++ 的 C Runtime Library(CRT) 检测内存泄漏. 首先,我们在.c或.cpp 文件首行插入这一段代码: #define _CRTD ...

  5. [Tyvj 模拟赛] 运

    运 [问题背景] zhx和妹子们玩数数游戏. [问题描述] 仅包含4或7的数被称为幸运数. 一个序列的子序列被定义为从序列中删去若干个数,剩下的数组成的新序列.两个子序列被定义为不同的当且仅当其中的元 ...

  6. Cookies的各方面知识(基础/高级)深度了解

    Cookies想必所有人都了解本文将围绕Cookies基础知识(什么是Cookies/Cookies如何传递/Cookies如何存储/Cookies如何查看)Cookies高级知识/Cookie的限制 ...

  7. c++ 基类,派生类的类型兼容性

    #include <iostream> using namespace std; class CFather { public: void display() const { cout&l ...

  8. 【[APIO2010]巡逻】

    \(APIO\)的题就是非常难啊 首先看到\(k=1\)的情况,显然我们只需要找到一条直径把这条直径的两端连起来就好了 因为我们连这一条新边的实质是使得这一条链上的边不需要重复经过了,我们想让走的边尽 ...

  9. 2、Spring Cloud - 入门概述

    前言: Spring Cloud是什么: 官网说明 SpringCloud,基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心, 全链路监控,服务网关,负载均衡,熔断器等组 ...

  10. ethereumjs/ethereumjs-vm-4-tests

    根据代码发现还要了解的模块有: ethereumjs/merkle-patricia-tree -对应数据存储的数据结构 ethereumjs-blockchain —— 区块链 ethereumjs ...