指针
定义:将地址形象化的称为“指针”。将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。一个指针变量指向了一个值的内存地址。意思是通过它能找到以它为地址的内存单元。一个指针变量指向了一个值的内存地址。
注意:Go语言支持指针类型*T,指针的指针**T,以及包含包名前缀的*package.T。
1、指针声明
a) 声明一个int类型指针
         var ip *int
         b)声明一个string类型指针
         var sp *string
         c) 通过 := 语法来定义指针
               var str string = "oldboy"
sp := &str
         d)声明一个int值的指针的指针变量(即,指针的指针)
          var p **int
         e) 声明一个time.Time值的指针变量
          var t *time.Time
   2、空指针
定义:当一个指针被定义后没有分配到任何变量时,它的值为 nil。nil 指针也称为空指针
注意:nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值 3、指针类型转换
    注意:
a)Go语言是不允许两个指针类型进行转换的。
b)unsafe.Pointer类型用于表示任意类型的指针。有4个特殊的只能用于Pointer类型的操作:
、 任意类型的指针可以转换为一个Pointer类型值
、 一个Pointer类型值可以转换为任意类型的指针
、 一个uintptr类型值可以转换为一个Pointer类型值
、 一个Pointer类型值可以转换为一个uintptr类型值
结构体
定义:结构体是由一系列具有相同类型或不同类型的数据构成的数据集合
特点:
1、用来自定义复杂数据结构
2、struct里面可以包含一个或多个字段(属性)
3、struct类型可以定义方法,注意和函数的区分
4、struct类型是值类型
5、struct类型可以嵌套
6、结构体是用户单独定义的类型,不能和其他类型进行强制转换
7、Go中的struct没有构造函数,一般可以使用工厂模式来解决这个问题
8、我们可以为struct中的每个字段,写上一个tag。tag可以通过反射的机制获取,常用的场景就是json序列化和反序列化
9、访问结构体成员, 用 "." 来连接,格式为:"结构体.成员名"
1、struct定义
a)定义一个新的数据类型,结构体中只有一个成员。
               type bigint int64
type smallint int8
         b) 定义一个新的数据类型,结构体中有多个成员
              type oldboy struct {
Linux string
Python string
Golang string
}
         c) 定义一个新的数据类型,指向结构体的指针
              type Linux string
type oldboy struct {
*Linux
}
   2、struct 初始化
注意:
有序初始化: 结构体中的多个成员的值,必须一一对应。
无序初始化: 结构体中的多个成员的值,无须一一对应,可初始化部分值。
a)方式一
1、定义
             type oldboy struct {
Linux string
Python string
Golang string
}
            2、初始化
               var ordered = oldboy{"linux", "python", "golang"}  // 有序初始化
var disordered = oldboy{Golang: "golang"} // 无序初始化
         b)方式二
1、定义
            type oldboy struct {
int
string
}
            2、初始化
               two := new(oldboy) //同 var two *oldboy = new(oldboy)  //指针变量
three := oldboy{, "three"}
four := oldboy{}
five := &oldboy{} //指针变量
six := &oldboy{, "six"} //同 var six *oldboy = &oldboy{2, "six"} //指针变量
         c)结构体包含结构体初始化
1、定义
              type Person struct {
name string
age int
addr string
}
type Employee struct {
Person //匿名字段
salary int
int //用内置类型作为匿名字段
addr string //类似于重载
}
            2、初始化
            em1 := Employee{
Person{"oldboy", , "北京"},
,
,
"首都",
}
      3、struct与tag应用
注意:tag声明struct结构的时候,在属性的右侧用小米点括起来的内容叫标签(Tag),
在转换成其它数据格式的时候,会使用其中特定的字段作为键值,一般在序列化和反序列化使用
a)定义
            type User struct {
UserId int
UserName string
}
type UserTag struct {
UserId int `json:"user_id" bson:"user_id"`
UserName string `json:"user_name" bson:"user_name"`
}
         b)初始化
            user := &User{UserId: , UserName: "oldboy"}
json_user, _ := json.Marshal(user)
fmt.Printf("struct User echo : %v\n", string(json_user)) user_tag := &UserTag{UserId: , UserName: "oldboy"}
json_user_tag, _ := json.Marshal(user_tag)

GO自定义类型与指针的更多相关文章

  1. c++ 自定义类型,函数指针类型

    用typedef定义函数指针类型 -函数指针和函数指针数组 46课里边有如下代码 int add(int a,int b,int d) { return a+b+d; } int mul(int a, ...

  2. 《精通C#》自定义类型转化-扩展方法-匿名类型-指针类型(11.3-11.6)

    1.类型转化在C#中有很多,常用的是int类型转string等,这些都有微软给我们定义好的,我们需要的时候直接调用就是了,这是值类型中的转化,有时候我们还会需要类类型(包括结构struct)的转化,还 ...

  3. Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型

    Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...

  4. C++中vector::data()使用心得和对自定义类型指针运算符的默认重载

    一.C++ vector::data()函数 返回值类型:vector的基类 返回值:Returns a pointer such that [data(), data() + size()] is ...

  5. 一个关于自定义类型作为HashMap的key的问题

    在之前的项目需要用到以自定义类型作为HashMap的key,遇到一个问题:如果修改了已经存储在HashMap中的实例,会发生什么情况呢?用一段代码来试验: import java.util.HashM ...

  6. JavaScript之面向对象学习七(动态原型模式、寄生构造函数模式、稳妥构造函数模式创建自定义类型)

    一.动态原型模式 在面向对象学习六中的随笔中,了解到组合构造函数模式和原型模式创建的自定义类型可能最完善的!但是人无完人,代码亦是如此! 有其他oo语言经验的开发人员在看到独立的构造函数和原型时,很可 ...

  7. 《Go语言实战》Go 类型:基本类型、引用类型、结构类型、自定义类型

    Go 语言是一种静态类型的编程语言,所以在编译器进行编译的时候,就要知道每个值的类型,这样编译器就知道要为这个值分配多少内存,并且知道这段分配的内存表示什么. 提前知道值的类型的好处有很多,比如编译器 ...

  8. Golang之方法(自定义类型,struct)

    方法的使用,请看本天师的代码 //Golang的方法定义 //Golang中的方法是作用在特定类型的变量上,因此自定义类型,都可以有方法,不仅仅是struct //定义:func (recevier ...

  9. 转载:oracle 自定义类型 type / create type

    标签:type create oracle object record 一:Oracle中的类型有很多种,主要可以分为以下几类: 1.字符串类型.如:char.nchar.varchar2.nvarc ...

随机推荐

  1. poj 2081 Recaman's Sequence (dp)

    Recaman's Sequence Time Limit: 3000MS   Memory Limit: 60000K Total Submissions: 22566   Accepted: 96 ...

  2. tar.xz压缩工具使用(转)

    XZ压缩最新压缩率之王 xz这个压缩可能很多都很陌生,不过您可知道xz是绝大数linux默认就带的一个压缩工具. 我是在下载phpmyadmin的时候看到这种压缩格式的,phpmyadmin压缩包xz ...

  3. jq事件操作汇总

    bind()        向匹配元素附加一个或更多事件处理器blur( )        触发.或将函数绑定到指定元素的 blur 事件change()        触发.或将函数绑定到指定元素的 ...

  4. (转)linux特殊文件名字删除不了怎么办

    1. 文件名含有特殊字符,直接使用 rm 可能删除不了,可以使用如下方法: 1) 使用 ls -i 查处该文件的 inode 号,假设为654321 2) 使用find命令删除 find ./ -in ...

  5. fastai 核心部件

    1.ImageDataBunch 对数据封装的很好,包括预处理都在这里面完成了 2.models 现有模型及权重 2-1  create_body 可以用来获取现有模型的主体结构 2-2 create ...

  6. Java异常try里面有return,finally代码会执行吗

    try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后? 肯定会执行.finally{}块的代码只有在try{} ...

  7. 安装tidb数据库

    1.下载压缩包 安装tar包路径 命令:wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz 命令:wget http://d ...

  8. 构建的Web应用界面不够好看?快试试最新的Kendo UI R3 2019

    通过70多个可自定义的UI组件,Kendo UI可以创建数据丰富的桌面.平板和移动Web应用程序.通过响应式的布局.强大的数据绑定.跨浏览器兼容性和即时使用的主题,Kendo UI将开发时间加快了50 ...

  9. JZOJ5358【NOIP2017提高A组模拟9.12】BBQ

    题目 分析 发现,\(C_{ai+aj+bi+bj}^{ai+aj}\),其实就等于从(0,0)走最短路到(ai+aj,bi+bj). 我们可以想办法将i.j分开,从(0,0)走最短路到(ai+aj, ...

  10. Python 正则表达式Ⅳ

    repl 参数是一个函数 以下实例中将字符串中的匹配的数字乘以 2: 执行输出结果为: re.compile 函数 compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象 ...