go中interface作为参数和switch里的type

package main

import (
    "fmt"
    "time"
)


func main()  {
    i :=2
    fmt.Println("Write", i ,"as")
    switch i {
    case 1:
        fmt.Println("one")
    case 2:
        fmt.Println("two")
    case 3:
        fmt.Println("three")
    }
    switch time.Now().Weekday() {
    case time.Saturday,time.Sunday:
        fmt.Println("It's the weekend")
    default:
        fmt.Println("Its a weekday")

    }
    //理解是获取接口实例实际的类型指针,以此调用实例所有可调用的方法,包括接口方法及自有方法。
    //需要注意的是该写法必须与switch case联合使用,case中列出实现该接口的类型。
    //interface{}是可以传任意参数的,i.(type)必须在switch语句里使用,如果需要在其他位置就要使用reflect.Typeof
    whatAmI := func(i interface{}) {
        switch t:=i.(type) {
        case bool:
            fmt.Println("bool")
        case int:
            fmt.Println("int")
        default:
            fmt.Printf("dont know type %T",t)
        }
    }
    whatAmI((true))
    whatAmI((1))
    whatAmI("hey")
}

转载于:https://www.cnblogs.com/c-x-a/p/11203103.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Golang ,`Formatter` 接口是一个非常重要的接口,它定义了一个类型如何格式化自身的方法,该方法是 `Format(f State, verb rune)`。 具体来说,`Formatter` 接口定义了一个 `Format` 方法,该方法接受两个参数: - `f State`: 表示格式化时需要的状态信息,如宽度、精度等,可以使用 `f` 提供的方法来获取这些信息。 - `verb rune`: 表示需要进行的格式化操作,如 `%v`、`%d` 等。 在实现 `Formatter` 接口时,我们需要实现 `Format` 方法,根据 `verb` 参数来决定如何进行格式化操作,并将格式化后的结果写入 `f` 提供的 `Write` 方法。 下面是一个简单的示例: ``` package main import ( "fmt" ) type Person struct { Name string Age int Height float64 } func (p Person) Format(f fmt.State, verb rune) { switch verb { case 'v': if f.Flag('+') { fmt.Fprintf(f, "Name=%s, Age=%d, Height=%.2f\n", p.Name, p.Age, p.Height) return } fmt.Fprintf(f, "Person{Name=%s, Age=%d, Height=%.2f}", p.Name, p.Age, p.Height) case 's': fmt.Fprintf(f, "Name=%s", p.Name) case 'd': fmt.Fprintf(f, "Age=%d", p.Age) case 'f': fmt.Fprintf(f, "Height=%.2f", p.Height) } } func main() { p := Person{"John", 30, 175.0} fmt.Printf("%v\n", p) fmt.Printf("%+v\n", p) fmt.Printf("%s\n", p) fmt.Printf("%d\n", p) fmt.Printf("%f\n", p) } ``` 输出结果为: ``` Person{Name=John, Age=30, Height=175.00} Name=John, Age=30, Height=175.00 Name=John Age=30 Height=175.000000 ``` 在这个示例,我们定义了一个 `Person` 结构体,并实现了 `Format` 方法,根据 `verb` 参数来决定如何进行格式化操作。在 `main` 函数,我们使用不同的 `verb` 参数来进行格式化输出,可以看到输出结果是不同的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值