函数也是一种类型

adding_func_to_func.go

package attaching_func_to_a_func

import "fmt"

//在Go中,func(函数)也是一种类型,你可以给它指定一个类型名称、增加方法
type IO func(input string)string

//给函数增加方法
func (io IO) Print(input string){
    o := io(input)

    fmt.Println("IN: ",input)
    fmt.Println("OUT: ",o)
}



adding_func_to_func_test.go
package attaching_func_to_a_func

import (
    "fmt"
    "reflect"
    "strings"
    "testing"
)

func TestFuncRun(t *testing.T){
    m := IO(func(i string) string {//函数执行逻辑
        r := strings.Replace(i, "lower", "upper", 1)
        return strings.ToUpper(r)
    })

    fmt.Println("type:",reflect.TypeOf(m))//type: attaching_func_to_a_func.IO
    m.Print("hi,this is lower case")
    /*
    输出结果:
    IN:  hi,this is lower case
   OUT:  HI,THIS IS UPPER CASE
     */
    t.Logf("Pass!")
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容