package main

import "fmt"

func main() {
p1 :=new(int)
*p1 =1
fmt.Println("p1",p1)
fmt.Println("*p1",*p1)
fmt.Println("&p1",&p1) s1 := new([]int)
s2 := []*int{}
s3 := []int{1,2} s2 =append(s2,p1)
fmt.Println("s1: ", s1)
fmt.Printf("s2:%v\n", s2)
fmt.Printf("s2:%T\n", s2)
fmt.Println("s3: ", s3) }

输出

p1 0xc00000a0d0
*p1 1
&p1 0xc000006028
s1: &[]
s2:[0xc00000a0d0]
s2:[]*int
s3: [1 2]

问题一 s1,s2,s3的区别是什么?

s1 将创建一个[]int类型的匿名变量,初始化为[]int类型的零值,然后返回变量地址,返回的指针类型为 *[]int 。

s2 声明创建一个int指针类型的空切片。

s3 声明创建一个int类型的切片,初始化字面量1,2。

s1是指针地址,s2是存放指针地址的切片,s3就是一个切片。

用new创建变量和普通变量声明语句方式创建变量没有什么区别,除了不需要声明一个临时变量的名字外,还可以在表达式中使用new(T)。new函数类似是一种语法糖,直接返回变量的地址,而不是一个新的基础概念。

下面的两个newInt函数有着相同的行为:

func newInt() *int {
return new(int)
} func newInt() *int {
var dummy int
return &dummy
}

每次调用new函数都是返回一个新的变量的地址,因此下面两个地址是不同的:

p := new(int)
q := new(int)
fmt.Println(p == q) // "false"

当然也可能有特殊情况:如果两个类型都是空的,也就是说类型的大小是0,例如struct{}[0]int,有可能有相同的地址。

new函数使用常见相对比较少,因为对应结构体来说,可以直接使用字面量语法创建新变量的方法会更灵活。

由于new只是一个预定义的函数,它并不是一个关键字,因此可以将new名字重新定义为别的类型。例如下面的例子:

func delta(old, new int) int { return new - old}

由于new被定义为int类型的变量名,因此在delete函数内部是无法使用内置的new函数的。

问题二 s2如何才能像s3一样直接赋值?

s2是int类型指针切片,直接存放int类型的指针地址就好

问题三 s2赋完值之后如何才能打印出来值类型?

参考:Go语言fmt.Sprintf、fmt.Printf(格式化输出)

%T 	输出 Go 语言语法格式的类型和值

fmt.Printf("s2:%T\n", s2)

输出

s2:[]*int

Go new函数 例子解析答疑的更多相关文章

  1. Generator函数语法解析

    转载请注明出处: Generator函数语法解析 Generator函数是ES6提供的一种异步编程解决方案,语法与传统函数完全不同.以下会介绍一下Generator函数. 写下这篇文章的目的其实很简单 ...

  2. Tensorflow-hub[例子解析2]

    接Tensorflow-hub[例子解析1]. 3 基于文本词向量的例子 3.1 创建Module 可以从Tensorflow-hub[例子解析1].中看出,hub相对之前减少了更多的工作量. 首先, ...

  3. 两个实例轻松理解js函数预解析

    js函数预解析 例子1: 先上一段代码,看看能不能写出最终的执行结果. console.log(a); var a = 1; console.log(a); function a(){ console ...

  4. 字串符相关 split() 字串符分隔 substring() 提取字符串 substr()提取指定数目的字符 parseInt() 函数可解析一个字符串,并返回一个整数。

    split() 方法将字符串分割为字符串数组,并返回此数组. stringObject.split(separator,limit) 我们将按照不同的方式来分割字符串: 使用指定符号分割字符串,代码如 ...

  5. Poco库网络模块例子解析1-------字典查询

    Poco的网络模块在Poco::Net名字空间下定义   下面是字典例子解析 #include "Poco/Net/StreamSocket.h" //流式套接字 #include ...

  6. 非分离线程未使用join函数例子:

    //非分离线程未使用join函数例子: #include<stdlib.h> #include<pthread.h> #include<stdio.h> #incl ...

  7. [教程]Delphi 中三种回调函数形式解析

    Delphi 支持三种形式的回调函数 全局函数这种方式几乎是所有的语言都支持的,类的静态函数也可以归为此类,它保存的只是一个函数的代码起始地址指针( Pointer ).在 Delphi 中声明一般为 ...

  8. windows窗口过程函数名词解析

    windows窗口过程函数名词解析 LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) 1. LR ...

  9. mask-rcnn代码解读(六):resize_image()函数的解析

    我已经根据resize_image()函数的解析对原图像与resize图像进行了解析, 若有读者想对原图像与目标图像不同尺寸验证,可根据以下代码,调整函数参数, 其细节如下: import cv2 a ...

  10. Java字节码例子解析

    举个简单的例子: public class Hello {     public static void main(String[] args) {         String string1 = ...

随机推荐

  1. 【OpenCV】features2d_converters.cpp:2:10: fatal error: common.h: 没有那个文件或目录

    Linux环境下使用opencv的dnn模块调用yolov4遇到的坑(纯CPU)一.问题描述Ubuntu安装opencv4.4,第一次编译完成安装成功,发现编译时少加了几个选项,于是重新编译,结果报如 ...

  2. tnn初体验

    tnn-source download-model brew install opencv@3 && brew link --force opencv@3

  3. Solution Set -「AGC 010~012」C~F

    目录 「AGC 010C」Cleaning 「AGC 010D」Decrementing 「AGC 010E」Rearranging 「AGC 010F」Tree Game ^ 「AGC 011C」S ...

  4. 用于决策的世界模型 -- 论文 World Models (2018) & PlaNet (2019) 讲解

    参考资料: [2411.14499] Understanding World or Predicting Future? A Comprehensive Survey of World Models ...

  5. SpringCloud与Dubbo的区别

    1.SpringCloud与Dubbo的区别两者都是现在主流的微服务框架,但却存在不少差异: 初始定位不同:SpringCloud定位为微服务架构下的一站式解决方案:Dubbo 是 SOA 时代的产物 ...

  6. w3cschool-Go 教程

    https://www.w3cschool.cn/go/ Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pi ...

  7. [车联网/以太网] SOME/IP 协议

    概述: SOME/IP 协议 车载以太网协议栈总共可划分为5层: 物理层 数据链路层 网络层 传输层 应用层 其中本文所要描述的SOME/IP就是一种应用层协议. SOME/IP协议内容按照AUTOS ...

  8. C++:typedef 与 #define 的区别

    1.执行上不同 关键字 typedef 在编译阶段有效,由于是在编译阶段,因此 typedef 有类型检查的功能. #define 则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字 ...

  9. java集合中的迭代器Iterator和数组内置方法以及常见的报错

    删除Map的中某一项报错 package part; import java.util.HashMap; import java.util.Set; public class Java01 { pub ...

  10. 份额大涨! 天翼云稳居中国公有云laaS市场、laaS+PaaS市场第三!

    近日,国际数据公司(IDC)最新发布的<公有云市场数据跟踪,2023Q3>报告显示,在公有云整体市场增速全面收紧的背景下,中国电信天翼云市场份额大涨,中国公有云IaaS市场份额增长至12. ...