[]byte的反射值

huangapple go评论86阅读模式
英文:

Reflect value of []byte

问题

如何检索此接口的[]byte值?

package main

import (
	"reflect"
)

func byteInterface() interface{} {
	return []byte("foo")
}

func main() {
	//var b []byte
	i := byteInterface()
	
	switch {
	case reflect.TypeOf(i).Kind() == reflect.Slice && (reflect.TypeOf(i) == reflect.TypeOf([]byte(nil))):
		
	default:
		panic("should have bytes")
	}
}

你可以使用类型断言来检索接口的[]byte值。在这种情况下,你可以使用以下代码:

b := i.([]byte)

这将将接口值i转换为[]byte类型,并将其赋值给变量b。请注意,在进行类型断言之前,你应该确保接口值的类型是[]byte

英文:

How do I retrieve the []byte value of this interface?

package main

import (
	"reflect"
)

func byteInterface() interface{} {
	return []byte("foo")
}

func main() {
	//var b []byte
	i := byteInterface()
	
	switch {
	case reflect.TypeOf(i).Kind() == reflect.Slice && (reflect.TypeOf(i) == reflect.TypeOf([]byte(nil))):
		
	default:
		panic("should have bytes")
	}
}

答案1

得分: 8

你可以使用type assertion来实现这个功能,不需要使用reflect包:

package main

func byteInterface() interface{} {
    return []byte("foo")
}

func main() {
    i := byteInterface()

    if b, ok := i.([]byte); ok {
        // 使用b作为[]byte类型
        println(len(b))
    } else {
        panic("应该是字节类型")
    }
}
英文:

You can use a type assertion for this; no need to use the reflect package:

package main

func byteInterface() interface{} {
    return []byte("foo")
}

func main() {
    i := byteInterface()

    if b, ok := i.([]byte); ok {
      // use b as []byte
      println(len(b))
    } else {
      panic("should have bytes")
    }
}

huangapple
  • 本文由 发表于 2014年12月31日 01:43:01
  • 转载请务必保留本文链接:https://go.coder-hub.com/27710022.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定