首页 > 编程语言 >golang程序健壮性相关细节

golang程序健壮性相关细节

时间:2022-09-26 19:34:37浏览次数:50  
标签:struct 健壮性 UserList fmt List golang userList 细节 type

结构体定义

1、请问下面输出是什么

package main

import (
    "fmt"
)

func main() {
    l := get()
    fmt.Printf("%p", l)
    fmt.Printf("%p", l.List)
    for _, v := range l.List {
        fmt.Printf("%#v", v)
    }
}

func get() *UserList {
    return nil
}

type User struct {
    Name string
    ID   int
}
type UserList struct {
    List []*User
}

 

 

2、看下面输出什么

package main

import (
    "fmt"
)

func main() {
    var userList = &UserList{}
    for _, v := range userList.List {
        fmt.Printf("v = %#v", v)
    }
    fmt.Printf("%p\n", userList.List) // 0x0
    fmt.Println(userList.List)        // []
    fmt.Println(len(userList.List))   // 0
}

func get() *UserList {
    return nil
}

type User struct {
    Name string
    ID   int
}
type UserList struct {
    List []*User
}

 

结论:

1、使用空指针查找任何一个值都会直接 panic ,比如 nil.attribute

2、对于一个实例化的 struct , 访问 struct.List 其实得到的是一个slice的零值,那么这个访问是不会panic的,就像访问一个空数组

3、var a type ,声明a的数据类型,此刻并没有初始化一个实际的内存

 

 

https://blog.csdn.net/qq_43778308/article/details/115839978

 

标签:struct,健壮性,UserList,fmt,List,golang,userList,细节,type
From: https://www.cnblogs.com/xuweiqiang/p/16732091.html

相关文章

  • golang 中 取切片元素 与 切片再生成切片的区别
    funcmain(){//定义一个切片a:=[]byte{1,2,3}fmt.Printf("a的类型%T\n",a)//a的类型[]uint8fmt.Printf("a原来的值%v\n",a)//a原来的值[1......
  • golang面试题3
    go基础1、redis部署多节点模式,异步队列2、go-redis和redis-go//go-redis的连接模式,直连哨兵3、go异常处理,异常捕获方式,go里面替代try-catch如何操作4、gomaxprocs的默认......
  • 密码学奇妙之旅、01 CFB密文反馈模式、AES标准、Golang代码
    CFB密文反馈模式CFB密文反馈模式属于分组密码模式中的一种。加密与解密使用同一结构,加密步骤生成用于异或的密钥流。其弥补了ECB电子密码本模式的不足(明文中的重复排列会......
  • golang中下划线的作用
    1.忽略返回值2判断一个类是否实现了某个接口//定义了一个animal接口1typeAnimalinterface{Say()}//定义了一个dog结构体typeDogstruct{}//用来判断Do......
  • 【golang】json数据解析 - 嵌套json解析
    @目录1.通过结构体映射解析2.嵌套json解析-map1.通过结构体映射解析原数据结构解析//结构体typecontractJsonstruct{ Data[]transaction`json:"data"` T......
  • golang goroutine协程泄露
      语言级别的并发支持是Go的一大优势,但这个优势也很容易被滥用。通常我们在开始Go并发学习时,常常听别人说,Go的并发非常简单,在调用函数前加上go关键词便可启动g......
  • Mybatis-Plus 容易忽视的细节--save方法
    雷大佬的方法new实体在迭代过程中逐条save(实体)实体.get主键->进一步业务逻辑我的天真想法new实体内心OS:“为啥单独save,不是有saveBatch()?”实体.get主键->进一......
  • golang值传递和引用传递
    Go中所有的参数传递都是值传递,拷贝的都是一个副本。但是,这里分两种情况讨论,引用类型 和 非引用类型。非引用类型(值类型):int,string,float,bool,数组和struct;特点:值类型变量......
  • GoLang之ACM控制台输入输出
    转自:https://blog.csdn.net/weixin_52690231/article/details/125436414    ......
  • golang知识点
    1.“=”和“:=”在golang中“=”是赋值(使用=号赋值必须先var声明使用)varaa=100varb=100varcint=100“:=”是声明变量后并赋值(:=是声明并赋值并且系统自......