当前位置: 首页 > 面试题库 >

Golang基础知识struct和new()关键字

姚阳德
2023-03-14
问题内容

我正在学习golang,在浏览介绍结构的章节时,我遇到了多种初始化结构的方法。

p1 := passport{}
var p2 passport
p3 := passport{
    Photo: make([]byte, 0, 0),
    Name: "Scott",
    Surname: "Adam",
    DateOfBirth: "Some time",
}

fmt.Printf("%s\n%s\n%s\n", p1, p2, p3)

虽然这些将结构的值打印为

{ } { } { Scott Adam Some time} ,下面的代码以与号打印,因为它是参考。

pointerp1 := &p3
fmt.Printf("%s", pointerp1)
pointerp2 := new(passport)
pointerp2.Name = "Anotherscott"
fmt.Printf("%s", pointerp2)

&{ Scott Adam Some time}&{ Anotherscott }

如有疑问,请帮助我。

  1. 在用法中pointerp1 := &p3pointerp1是的引用变量p3,用于保存实际数据。同样,保存数据的实际变量是pointerp2什么?

  2. 使用这些不同类型的初始化的最佳方案是什么?


问题答案:

new为新项目分配零存储或键入任何内容,然后返回指向它的指针。我不认为这是否真的很重要,如果您使用newvs短变量声明,:= type{}那基本上只是偏好

至于pointer2pointer2变量会保存自己的数据

// initializing a zeroed 'passport in memory'
pointerp2 := new(passport)
// setting the field Name to whatever
pointerp2.Name = "Anotherscott"

new分配内存清零存储和返回一个指向它,所以在短,新会返回一个指针,无论你正在做,这就是为什么pointerp2回报&{ Anotherscott }

您主要希望在传递需要修改的变量时使用指针(但要注意数据争用使用互斥或​​通道,如果您需要从不同的函数读取和写入变量)

人们使用的一种常用方法不是newdec类型的指针类型:

blah := &passport{}

等等现在是键入护照的指针

您可以在这个游乐场看到:

http://play.golang.org/p/9OuM2Kqncq

传递指针时,可以修改原始值。传递非指针时,您将无法对其进行修改。这是因为in
go变量是作为副本传递的。因此,在该iDontTakeAPointer函数中,它正在接收测试程序结构的副本,然后修改名称字段,然后返回,这对我们没有任何帮助,因为它正在修改副本而不是原始副本。



 类似资料:
  • 本文向大家介绍GO语言(golang)基础知识,包括了GO语言(golang)基础知识的使用技巧和注意事项,需要的朋友参考一下 今天说一些golang的基础知识,还有你们学习会遇到的问题,先讲解hello word package name 包机制,每一个独立的go程序都需要有一个package main的申明,主要是要为下边入口函数main()做申明的,import和java一样导入包用的 就是

  • 系统环境MAC OS 10.10 MySQL版本,5.7.9 Mac 安装mysql很简单,官网下载安装包,双击安装就可以了,有几个地方需要注意 在Mac下用DMG包新安装mysql,在安装完毕最后一步会随机分配一个root密码,记住密码,安装完毕用root登录,但密码是过期状态,mysql默认情况下密码有效期是360天,需要重新改下,具体请看Password Expiration Policy

  • 基础知识 基于 ruby 写的 官网文档:https://www.elastic.co/guide/en/logstash/5.2/first-event.html 如果是通过网络来收集,并不需要所有机子都装,但是如果是要通过读取文件来收集,那文件所在的那个机子就的安装 配置文件的写法格式:https://www.elastic.co/guide/en/logstash/5.2/configura

  • 这些基础知识简单了解一下就可以了,Linux 用的多了 就会慢慢熟悉理解了。 快捷键表 Ctrl键是终端用户常用的按键,但大多数触摸键盘都没有这个按键,因此 Termux 使用音量减小按钮来模拟Ctrl键。 例如,在触摸键盘上按音量减小+ L就相当于是键盘上按Ctrl + L的效果一样,达到清屏的效果。 Ctrl + A -> 将光标移动到行首 Ctrl + C -> 中止当前进程 Ctrl +

  • 什么是 Logstash?为什么要用 Logstash?怎么用 Logstash? 本章正是来回答这个问题,或许不完整,但是足够讲述一些基础概念。跟着我们安装章节一步步来,你就可以成功的运行起来自己的第一个 logstash 了。 我可能不会立刻来展示 logstash 配置细节或者运用场景。我认为基础原理和语法的介绍应该更加重要,这些知识未来对你的帮助绝对更大! 所以,认真阅读他们吧!

  • 四种设置回调函数的方式 匿名函数 $server->on('Request', function ($req, $resp) use ($a, $b, $c) { echo "hello world"; }); !> 可使用use向匿名函数传递参数 类静态方法 class A { static function test($req, $resp) { ech