美文网首页
2023-11-21日记(结构体、接口...)

2023-11-21日记(结构体、接口...)

作者: 护念 | 来源:发表于2023-11-20 21:26 被阅读0次

概述

今天的知识点相对零散,以日记形式记录。

1. 结构体实例

  1. 首先,结构体是值类型,非引用类型;因此var 后 会分配内存。
  2. 注意下面三种写法的区别
package main

import "fmt"

type Person struct {
    Name string
}

func main() {
    var p1 = new(Person) // 结构体实例 - 指针
    var p2 = Person{}       //  结构体实例(老老实实写法)
    var p3 Person              // 结构体实例 (值类型自动初始化了)

    fmt.Printf("p1: %#v Type: %T\n", p1, p1)
    fmt.Printf("p2: %#v Type: %T\n", p2, p2)
    fmt.Printf("p3: %#v Type: %T\n", p3, p3)
}

// p1: &main.Person{Name:""} Type: *main.Person
// p2: main.Person{Name:""} Type: main.Person
// p3: main.Person{Name:""} Type: main.Person

2. 接口方法 + 指针接收者

  1. 在结构体中我们知道,无论是机构体指针还是实例它们都能同时驱动,实例接收者、指针接收者;
  2. 对于指针接收者而言,则不行,必须要老老实实用指针。
package main

import "fmt"

type Speaker interface {
    say()
}

type Person struct {
    Name string
}

func (p *Person) say() {
    fmt.Println("hello")
}

func main() {
    p1 := Person{Name: "zhangsan"}          // Person实例
    var p2 Speaker = Person{Name: "wangwu"} // Speaker 接口
    // 由于say方法的接收者是指针,而这里是实例所以会报错
    // cannot use Person{…} (value of type Person) as Speaker value in variable declaration: Person does not implement Speaker (method say has pointer receiver)
    // 正确写法这里改成指针

    p1.say()
    p2.say()
}

3. 看代码时遇到接口类型咋办?

  1. 只关注输入和输出,不关注具体实现(我们去看接口中方法的就行)
  2. 如果要知道当前这个接口具体指的是哪个对象
  • fmt.Printf("%#v") 打印出来看
  • 可以用dlv调试追踪看看(需要特别说明的时,dlv调试的时候,会看到当前接口,在接口往下有一个data:在data里能看到真实的对象是哪个)

4. 看golang文档的心得

  1. type 相当于类
  2. 下面有函数-类方法;方法- 实例方法


    image.png

5. int类型是什么类型?

它的位数取决于你的操作系统,如果是32位则是32位;如果是64位则是64位

package main

import "fmt"

func main() {
    a := int(99999990999999)
    fmt.Printf("T: %T; %#v\n", a, a)
}

// T: int; 99999990999999

相关文章

  • go - 学习笔记

    基础 函数 指针 结构体 接口 错误 协程 通道 基础 函数 指针 结构体 接口 错误 协程 通道

  • 10. Go极简教程 Interface接口

    接口 interface 接口声明了方法集合 如果某个结构体实现了接口内的所有方法, 就可以把该结构体赋值给接口 ...

  • Go语言接口知识点2 和 别名

    接口的断言 1. 如果结构体实现了某个接口你那么就可以使用接口类型来保存结构体变量, 那么该变量只能访问接口中的方...

  • go type关键字

    [TOC]type有几种用法:定义结构体,定义接口, 类型别名, 类型定义, 类型开关 定义结构体 结构体是由一系...

  • go得快(1)

    接口 多态 结构体里的tag 类型断言 空接口 接口的三个规则

  • C# 接口(interface)

    接口包含类或结构体可以实现的一组相关功能的定义。 实现接口的任何类或结构体都必须实现其所有成员。 接口无法实例化,...

  • Go语言 type关键字

    type有几种用法:定义结构体,定义接口, 类型别名, 类型定义, 类型开关 定义结构体结构体是由一系列具有相同...

  • go语言中的继承和实现

    go语言没有类,只有结构体。以及还有接口,如何利用结构体和接口来实现类似与java的继承和实现呢?我试着整理一下。...

  • golang 指针类型引起的神奇 bug

    下面是使用的结构体接口抽象定义,其实就是将结构体存进一个 map里。由于是读写都比较频繁,我加了读写锁。 结构体定...

  • go快速学习_结构体-接口-结构体函数

    接口为什么要特意的罗列出来呢? 因为go和传统的面向对象的编程语言不太一样,没有什么类和继承的概念.通过接口来实现...

网友评论

      本文标题:2023-11-21日记(结构体、接口...)

      本文链接:https://www.haomeiwen.com/subject/cmhuwdtx.html