热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

struct结构体Go学习记录

实例创建及初始化基本使用funcTestInitEmployee(t*testing.T){typeEmployeestruct{IdintNamestringAgeint}e:E






实例创建及初始化


  • 基本使用

    func TestInitEmployee(t *testing.T) {
    type Employee struct {
    Id int
    Name string
    Age int
    }
    e := Employee{"0", "Bob", 20}
    e1 := Employee{name: "Ali", Age: 30}
    // 注意这里返回的引用/指针, 相当于 e:= &Employee{}
    e2 := new(Employee)
    // 与其他的编程语言不同, 可以不用 -> 的方式来访问指定的属性
    e2.Id = "2"
    e2.Age = 23
    e2.Name = "Ali"
    // 访问
    t.Log(e1.Id) // 0
    t.Logf("e is %T", e) // e is employee_test.Employee 前面如果加上 & 那么返回的也是 指针类型
    t.Logf("e2 is %T", e2) // e2 is *employee_test.Employee 这个是指针类型
    }


  • 非指针传递会生成一个新的结构对象,其中每个成员会复制。指针传递,只是传递指针,且该指针指向原有结构。



// 这一种,定义方式在实例对应方法变调用的时候 ,实例的成员会进行值复制
func (e Employee) String() string {
fmt.Printf("输出自己的e的地址 %x\n", unsafe.Pointer(&e.Name)) // c00000a0e8
return fmt.Sprintf("ID :%d-Name:%s-Age:%d", e.Id, e.Name, e.Age)
}
// 在通常情况下避免内存拷贝我们使用 这种方式
func (e *Employee) String() string {
fmt.Printf("输出自己的e的地址 %x\n", unsafe.Pointer(&e.Name)) // c00000a0e8
return fmt.Sprintf("ID :%d/Name:%s/Age:%d", e.Id, e.Name, e.Age)
}
// 测试 String 方法
func TestInit(t *testing.T) {
e := Employee{1, "Bob", 20}
// 第一种
// t.Log(e.String()) // ID :1-Name:Bob-Age:20
fmt.Printf("输出传进来的e的地址 %x\n", unsafe.Pointer(&e.Name)) // c00000a108
// 第二种
t.Log(e.String()) // ID :1/Name:Bob/Age:20
fmt.Printf("输出传进来的e的地址 %x\n", unsafe.Pointer(&e.Name)) // c00000a0e8
}

如想看学习记录同步的练习代码移步 GitHub 。




Go学习


推荐阅读
  • golang 解析磁力链为 torrent 相关的信息
    其实通过http请求已经获得了种子的信息了,但是传播存储种子好像是违法的,所以就存储些描述信息吧。之前python跑的太慢了。这个go并发不知道写的有没有问题?!packag ... [详细]
  • 本文介绍了在go语言中利用(*interface{})(nil)传递参数类型的原理及应用。通过分析Martini框架中的injector类型的声明,解释了values映射表的作用以及parent Injector的含义。同时,讨论了该技术在实际开发中的应用场景。 ... [详细]
  • Go设计模式实现,包含常见的设计模式实现,同时这也是极客时间-设计模式之美的笔记,源课程采用Java实现,本系列会采用Go实现课程:65|迭代器模式(上):相比直接遍历集合数据,使 ... [详细]
  • 本文主要分享【go协程模型】,技术文章【【GORM】模型关系-HasOne】为【VivaPython】投稿,如果你遇到GoWeb相关问题,本文相关知识或能到你。go协程模型一、概述HasO ... [详细]
  • 集成第三方库,自检测读取配置文件。文件读取,结构体定义,接口实现,错误返回,库解析,适合新同学练手。思路文件读取获取字节流文件类型分析,确定解析api集成第三方解析api管理器定义 ... [详细]
  • 设计模式——模板方法模式的应用和优缺点
    本文介绍了设计模式中的模板方法模式,包括其定义、应用、优点、缺点和使用场景。模板方法模式是一种基于继承的代码复用技术,通过将复杂流程的实现步骤封装在基本方法中,并在抽象父类中定义模板方法的执行次序,子类可以覆盖某些步骤,实现相同的算法框架的不同功能。该模式在软件开发中具有广泛的应用价值。 ... [详细]
  • 数据库技术:execute immediate
    首先在这里发发牢骚,指责下那些刻板的书写方式,不考虑读者理不理解,感觉就是给专业人员用来复习用的一样,没有前戏,直接就高潮,实在受不了!没基础或基础差的完全不知道发生了什么,一脸懵 ... [详细]
  • 本文整理了Java中android.app.AppOpsManager.strOpToOp()方法的一些代码示例,展示了AppOpsManager.strO ... [详细]
  • 看到平台银行对接方案写的demo确实还不错记个笔记互相学习学习packageapiimport(cryptotlsnetnethttpstringssynct ... [详细]
  • 目录在Go语言项目中使用Zap日志库介绍默认的GoLogger日志库实现GoLogger设置Logger使用LoggerLogger的运行GoLogger的优势和劣势优势劣势Ube ... [详细]
  • Go 快速入门指南命令行参数
    命令行参数个数调用os包即可。获取参数个数,遍历参数packagemainimport(fmtos)funcmain(){fmt.Printf(Numberofargsi ... [详细]
  • 小编给大家分享一下Golang端口复用测试的实现方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有 ... [详细]
  • 目标由于众所周知的原因,golang.org无法直接访问,golang文档和安装包无法下载,golang.orgxnet等官方包无法下载。常见解决方案是无脑挂代理,解决一切问题,但 ... [详细]
  • 20220811:以下go语言代码输出什么?A:panic;B:编译错误;C:json marshal 报错
    2022-08-11:以下go语言代码输出什么?A:panic;B:编译错误;C:jsonmarshal报错;D:null;E:nil。packagemainimport(enc ... [详细]
  • hash表是什么从大学的课本里面,我们学到:hash表其实就是将key通过hash算法映射到数组的某个位置,然后把对应的val存放起来。如果出现了hash冲突(也就是说,不同的ke ... [详细]
author-avatar
手机用户2602883105
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有