Go语言中文网 为您找到相关结果 24

go类型断言

go里面的类型断言写法: x.(T) 其中x为interface{}类型 T是要断言的类型。 类型断言有个非常好的使用场景:当某个类型为interface{}的变量,真实类型为A时,才做某件事时,这时可以使用类型断言 下面有个例子。只有当某个interface{}的类型 存储的是int时才打印出来。 package main import ( "fmt" "math/rand" "time" ) func main() { var v interface{} r := rand.New(rand.NewSource(time.Now().UnixNano())) for i := 0; i < 10; i++{ v = i if (r.Intn(100) % 2) == 0 { v = "h...阅读全文

博文 2015-05-19 23:00:02 guonaihong

golang 接口interface{}、断言、switch type

interface{} 可以接受任何类型的对象值 获取interface{}队形的数据类型,可以使用断言,或者 switch type 来实现 // Assertion project main.go package main import ( "fmt" ) type Bag struct { Key string } type Bag2 struct { Key int } func main() { var b1 interface{} var b2 interface{} b1 = Bag{Key: "1"} b2 = Bag2{Key: 0} //获取interface{}中存放的数据类型 //方法一: { //判断是否是Bag类型 若不是则置0 b, ok := b1.(Bag)...阅读全文

博文 2016-03-03 16:00:01 xia_xing

golang追加写入文件

所有语言你想调试都可以下断言调试,当然也可以输出到日志文件中,此函数方便集成到你的项目中。//打印内容到文件中 //tracefile(fmt.Sprintf("receive:%s",v)) func tracefile(str_content string) { fd,_:=os.OpenFile("a.txt",os.O_RDWR|os.O_CREATE|os.O_APPEND,0644) fd_time:=time.Now().Format("2006-01-02 15:04:05"); fd_content:=strings.Join([]string{"======",fd_time,"=====",str_content,"\n"},"") buf:=[]byte(fd_con...阅读全文

博文 2016-11-01 17:00:01 e421083458

GO语言Comma-ok断言

Comma-ok断言的语法是:value, ok := element.(T)。element必须是接口类型的变量,T是普通类型。如果断言失败,ok为false,否则ok为true并且value为变量的值。来看个例子: package main import ( "fmt" ) type Html []interface{} func main() { html := make(Html, 5) html[0] = "div" html[1] = "span" html[2] = []byte("script") html[3] = "style" html[4] = "head" for index, element := range html { if value, ok := elem...阅读全文

博文 2016-08-16 10:00:22 alvine008

golang 断言 + 类型转换

自博客园http://my.oschina.net/u/157514/blog/148285 golang 语言中 也有类似javascript 的 typeof 判断类型的 方法 比如 func (a interface{}){ //第一种 if inst,ok:=a.(TypeA);ok{ inst.MethodA() } //第二种 switch inst:=a.(type){ case TypeA: inst.MethodA() default: fmt.Println("unknow") } } a可能是任意类型 a.(某个类型) 返回两个值 inst 和 ok ,ok代表是否是这个类型,Ok如果是 inst 就是转换后的 类型 a.(type) type是关键字 结合switch...阅读全文

博文 2015-06-17 20:03:49 u012210379

golang:interface{}类型测试

在golang中空的interface即interface{}可以看作任意类型, 即C中的void *. 对interface{}进行类型测试有2种语法: 1. Comma-ok断言: value, ok = element.(T), 其中T是具体类型. 2. Switch测试: switch element.(type) { case T1: case T2: default: } 其中T1, T2是具体类型. 注意: element.(type)语法不能在switch外的任何逻辑里使用. 在switch外必须使用comma-ok断言或者反射: reflect.TypeOf(element) reflect.ValueOf(element...阅读全文

博文 2016-09-07 07:00:02 zolo

Go Test 少为人知的特性

大部分 gophers 们都知道和喜爱 go test 工具,知道运行 go test 可以进行包测试,然而关于 go test 还有很多隐藏在背后的特性。 1、黑盒测试包(以 _test 结尾的包) 2、Skipping 测试 3、并行测试 4、其他,如 性能测试;覆盖率;断言等等 [点击查看原文](https://blog.splice.com/lesser-known-features-go-test/) ...阅读全文

regexp

为什么使用regexp无法进行前向断言 img src="http://www.baidu.com/a.jpg" r, _ := regexp.Compile(`(?=img src=").+jpg`) 为啥吗报错呢。。runtime错误 panic: runtime error: invalid memory address or nil pointer dereference [signal 0xb code=0x1 addr=0x74 pc=0x8895d] goroutine 1 [running]: sync/atomic.CompareAndSwapUint32() ...阅读全文

Golang之interface(多态,类型断言)

多态用法 package main //一种事物的多种形态,都可以按照统一的接口进行操作 //多态 import ( "fmt" "math/rand" "sort" ) type Student struct { Name string Id string Age int sortType int } type Book struct { Name string Author string } //切片默认传地址 type StudentArray []Student func (p StudentArray) Len() int { return len(p) } func (p StudentArray) Less(i, j int) bool { return p[i].Name <...阅读全文

博文 2018-01-15 07:30:01 pyyu

golang解析json配置文件

安装 go get github.com/akkuman/parseConfig 使用说明 环境假设 . ├── config.go ├── config.json config.json内容 { "name" : "akkuman", "urls" : ["xx.com","ww.com"], "info" : { "qq" : "123456", "weixin": "123456" } } 该库取出来的都是类型为interface{}的数据,如需取出具体类型的数据需要自己加断言 当取嵌套map数据的时候,以“ > ”指定下一级,注意>两边均有空格,具体见下面的例子 例子 config.go内容 package main import ( "github.com/akkuman/pars...阅读全文

博文 2017-10-26 09:00:01 Akkuman

golang 类型断言

golang类型断言 类型断言是一个使用在接口值上的操作 有时候,我们可能需要知道某个接口类型的实际类型,比如某个方法需要接收多种类型的数据并需要做分别处理,我们可以把形参设为空接口类型并接收任意类型的值,但是我们怎么反向知道里面实际保存的是哪个类型的对象呢? Comma-ok 断言 语法 value,ok := x.(T) x表示一个接口的类型,T表示一个类型(也可为接口类型) 该断言表达式会返回x的值和一个布尔值 可根据该布尔值判断x是否为T类型 如: func main() { var x interface{} x = 10 value, ok := x.(int) f...阅读全文

空接口(interface {})类型判断

空接口可以存储任意类型的数据,当需要判断到底是何种类型时,可以使用以下方法。 1 直接断言 比如我们收到一个类型为interface{}的变量unknown,可以通过如下代码直接断言是否为string类型: val, ok := unknow.(string) 如果返回ok为true,则变量unknown为string类型,同时返回一个val存储string类型的值。如果我们确定unknown为string类型,也可以不返回ok变量,直接强转获取其值: val := unknow.(string) 但是使用这种方法有一定的风险,如果不是string类型,会发生panic: panic: interface conversion: interface {} is int, not string...阅读全文

博文 2019-08-01 21:02:45 moonbamboo

golang interface

interface 类型断言 interface的变量里面可以存储任意类型类型数据 (原理: 任何类型都实现了空接口的方法【空方法】 ) 断言 value , ok:=elemet.(T) T 是断言的类型, element 是interface的值, ok bool类型, 判断是否是T类型, value 断言后的值 例 func main() { list :=make([]interface{},3) list[0]="qqq" list[1]=111 for _, data := range list { value, ok := data.(int) if ok { fmt.Println(value) fmt.Printf("%T",value) } } ``...阅读全文

博文 2018-12-27 23:34:42 husky_1

golang类型断言(Type Assertion)的应用

简单记录下平时开发对类型断言(Type Assertion)的使用场景。1.用于转换函数里interface{}类型的参数golang里的所有类型都实现了空接口interface{},所以通常将它作为一个函数的抽象类型的参数。举个简单栗子: package main import "fmt" func main() { add(1, 2) add(int16(1), int16(2)) add(float32(1.1), float32(2.2)) add(float64(1.1), float64(2.2)) add(true, false) } func add(a, b interface{}) { switch t := a.(type) { case int: fmt.Printf...阅读全文

博文 2017-12-19 12:04:54 Cedrus

Go语言的断言返回值和类型转换的区别

1.类型转换 (1)、语法:<结果类型> := <目标类型> ( <表达式> ) (2)、类型转换是用来在不同但相互兼容的类型之间的相互转换的方式,所以,当类型不兼容的时候,是无法转换的。 例如 各种int类型,[]byte和string类型 2.类型断言 二、类型断言 (1)语法: <目标类型的值>,<布尔参数> := <表达式>.( 目标类型 ) // 安全类型断言 <目标类型的值> := <表达式>.( 目标类型 ) //非安全类型断言 (2)类型断言的本质,跟类型转换类似,都是类型之间进行转换,不同之处在于,类型断言实在接口之间进行。 (3) 在switch中 <目标类型的值> := <表达式>.( type )后,case 目标类...阅读全文

关于Go中new函数方法中的Type怎么差看不了?

因为我想实现一个功能是传入一参数,通过获取这个参数的类型返回该参数类型的数据,例如:Go中的函数new 和 make 伪代码: ```go func getValue(obj interface{})Type{ // 通过断言得知该类型 v:=obj.(string) return v } ``` 返回后直接就是一个string 这个该如何实现? ...阅读全文

golang 笔记01

记录:感觉很容易写错的坑,代码如下package main import ( "fmt" ) type Iface interface { Show() } type St struct{} func (st *St) Show() { } func test1() Iface { var st *St fmt.Printf("st: %q\n", st) return st } func test2() *St { var st *St fmt.Printf("st: %q\n", st) return st } func main() { if v := test1(); v == nil { fmt.Printf("test1(), nil: %q\n", v) } else { fm...阅读全文

博文 2019-11-16 17:34:03 lobo

golang 类型断言

package main import "fmt" func main() { a := 39 b := 21.1 c := true d := "hello" e := []string{"hello"} checkType(a) checkType(b) checkType(c) checkType(d) checkType(e) } func checkType(t interface{}) { switch val := t.(type) { case nil: fmt.Println("nil") case int, int32, int64: fmt.Println("intx", val) case float32, float64: fmt.Println("floatx",...阅读全文

博文 2019-12-10 17:33:36 就超棒