4
A
回答
8
是,byte
is an alias for uint8
:“所有数值类型是不同的除了byte
,其是用于uint8
的别名,rune
,这是一个别名int32
”(斜体矿)。您甚至可以编写代码,如var x []uint8 = []byte("hi!")
and it compiles。
由于除了编写源代码之外没有区别,reflect
程序包在运行时在RAM中操作(相同)结构时不能做很多特殊的操作。
多想想Kind
小号具体而言,它们是指数据存储而非类型名称。因此,举例来说,如果你声明type A uint8
,和类型A
变量uint8
will have distinct reflect.Type
s but the same Kind
:
package main
import (
"fmt"
"reflect"
)
type A uint8
func main() {
x, y := A(1), uint8(1)
valX, valY := reflect.ValueOf(x), reflect.ValueOf(y)
fmt.Println("Types: x is", valX.Type(), "y is", valY.Type())
fmt.Println("Types match:", valX.Type() == valY.Type())
fmt.Println("Kinds: x is", valX.Kind(), "y is", valY.Kind())
fmt.Println("Kinds match:", valX.Kind() == valY.Kind())
}
具有输出
Types: x is main.A y is uint8
Types match: false
Kinds: x is uint8 y is uint8
Kinds match: true
所以,虽然这是一个有点傻去想假设语言,即使转到byte
是一个独特的类型而不是别名,他们有相同的reflect.Kind
。
相关问题
- 1. 为什么我的反射字典类型没有实现IDictionary?
- 2. 为什么没有illegalAccessException使用反射
- 3. 从字节数组中使用一个没有反射的类?
- 4. 为什么scala反射报告某些类没有声明?
- 5. 为什么ehcache2.6包中没有“net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter”类?
- 6. Java反射,对象有什么类?
- 7. 为什么inet_ntoa和inet_ntop“反向”字节?
- 8. 反射有什么好处?
- 9. 反射有什么问题?
- 10. 为什么java没有字节类型后缀?
- 11. 什么是PHP中的反射类?
- 12. 为什么.net/c#中没有字节字符串?
- 13. 为什么Java中没有字节或短文字?
- 14. 为什么字面值没有类型?
- 15. Java反射:我的Collection包含什么?
- 16. 为什么没有NSHTTPURLProtocol类?
- 17. fread循环不读取所有字节,为什么字节被反转?
- 18. 为什么数据库没有映射?
- 19. JCombobox focusLost没有发射,为什么?
- 20. 为什么Java中有包装类?
- 21. 为什么TableView变得没有反应?
- 22. ngKeydown为什么没有反应?
- 23. 为什么斯卡拉案例类字段没有反映为公共?
- 24. MVC4没有反射
- 25. 为什么C#没有包私有?
- 26. 为什么没有创建新节点?
- 27. 使用反射,有没有办法获得超类的字段?
- 28. 在Scala反射中,为什么TypeTag上的反射函数仍然具有类型擦除?
- 29. 为什么C#中没有朋友类?
- 30. 为什么Button类中没有getOnClickListener? (Android)
很酷,我没有意识到它被语言规范定义为别名。 (为什么符文是'int32'而不是'uint32',呵呵?) – chowey
很难说!字节必须是无符号的,因为所有的值都是有效的,并且约定它们是0-255。对于Unicode代码点,他们有一个选择,因为不超过2^31个代码点。我认为他们更喜欢在某些地方签名ints(比如数组索引),因为unsigned wraparound('0-1 == 0xffffffff')可能不直观。另一方面,位移量被定义为uint! (也许这是因为试图进行负面转变可能会以与架构相关的方式发生奇怪的行为,而不仅仅是因为惯例而失效。) – twotwotwo