Go 언어의 기본 인터페이스를 이해하는 데 도움이 되는 기사(2부)

풀어 주다: 2023-07-20 17:24:12
앞으로
1436명이 탐색했습니다.

빈 인터페이스의 의미

이 글에서는 스토리지 클래스 인터페이스를 소개합니다. 사실 다른 사람들은 이를 빈 인터페이스라고 부릅니다. .

빈 인터페이스의 역할은 모든 데이터를 저장하는 것입니다. inmilially,

empty 인터페이스는 메소드를 정의하지 않습니다. 즉, 모든 interface가 빈 인터페이스를 구현하므로 빈 인터페이스는 모든 데이터를 설득 할 수 있습니다. . 빈 인터페이스빈 인터페이스 샘플 코드

package main

import "fmt"

func main() {
    //变量直接赋值为空接口
    var x interface{}
    x = 1
    x = 1.1
    x = "666"
    x = [3]int{1, 2, 3} //数组
    x = []int{6, 23}    //切片
    x = map[string]string{
        "Name": "张三",
        "Age":  "666",
}
    fmt.Println(x)
    //map中value类型为空接口
    var y = map[string]interface{}{
        "Name":"张三",
        "Age":18,
}
    fmt.Println(y)
}
로그인 후 복사

실행 결과


빈 인터페이스는 실제로 모든 데이터를 저장할 수 있으며 직접적으로 쓸 수 있는.


空接口在函数中的应用

不知道你有没有想过,如果函数的参数,也是一个空接口,那不是就可以随便传值了吗?

我还用个毛静态类型,以后都用空接口得了,嗯。。。这个按下不表,等会说。


函数参数为空接口代码

package main
import "fmt"

func say(x interface{}) {
    fmt.Println(x)
}
func main() {
    say(1)
    say("666")
    say([]int{5, 1, 3})
}
로그인 후 복사

确实是如上述所说,函数参数为空接口类类型,的确可以传任何数据。

但是仅限打印时可以随便打印。

假设我想让传入的值+1

func say(x interface{}) {
    fmt.Println(x)
    fmt.Println(x+1)
}
로그인 후 복사

报错信息

Go 언어의 기본 인터페이스를 이해하는 데 도움이 되는 기사(2부)

所以说,空接口并不是万能的。


类型断言

上述函数虽然可以接收任意类型。

但是我有个需求。

如果传入的是int类型,参数+100。

如果传入的是字符串类型,参数+"666"。

如果传入的是其他类型,返回不存在。

这该怎么办呢?这就要用到断言这个功能。

断言语法

空接口.(类型)
로그인 후 복사

示例代码

func say(x interface{}) {
    value, ok := x.(int)
    if ok {
        //如果是ok表示断言成功,是int类型
        fmt.Println(value + 100)
}
    value2, ok := x.(string)
    if ok {
        //断言成功表示是字符串
        fmt.Println(value2 + "666")
  }
}
로그인 후 복사

如果说有很多类型,断言起来比较麻烦,这时候用switch比较好。

func say(x interface{}) {
    switch value := x.(type) {
    case int:
        fmt.Println(value + 10)
    case string:
        fmt.Println(value + "666")
    default:
        fmt.Println("啥都不是")
  }
}
//case可以继续写,可以写很多很多
로그인 후 복사

执行结果

Go 언어의 기본 인터페이스를 이해하는 데 도움이 되는 기사(2부)


总结

到此为止,Go语言的接口是全部都讲完了。

接口主要分为行为接口存储接口

  • 行为接口主要用在面向对象这个方向,规定父类必须有哪些动作。

  • 空接口时为了方便存值,可以存储任意类型。

위 내용은 Go 언어의 기본 인터페이스를 이해하는 데 도움이 되는 기사(2부)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:Go语言进阶学习
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿