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. 從字節數組中使用一個沒有反射的類?
- 2. Java反射,對象有什麼類?
- 3. 爲什麼java沒有字節類型後綴?
- 4. 反射有什麼好處?
- 5. 爲什麼Java中沒有字節或短文字?
- 6. 爲什麼字面值沒有類型?
- 7. Java反射:我的Collection包含什麼?
- 8. 爲什麼沒有NSHTTPURLProtocol類?
- 9. fread循環不讀取所有字節,爲什麼字節被反轉?
- 10. JCombobox focusLost沒有發射,爲什麼?
- 11. 爲什麼Java中有包裝類?
- 12. ngKeydown爲什麼沒有反應?
- 13. 爲什麼TableView變得沒有反應?
- 14. 使用反射,有沒有辦法獲得超類的字段?
- 15. 爲什麼沒有創建新節點?
- 16. 在Scala反射中,爲什麼TypeTag上的反射函數仍然具有類型擦除?
- 17. 爲什麼C#中沒有朋友類?
- 18. 爲什麼Microsoft.Web.Helpers中沒有'Facebook'類?
- 19. 爲什麼Java中沒有靜態類
- 20. 爲什麼在RandomAccessFile類中沒有readUnsignedInt?
- 21. 爲什麼JFreeChart中沒有文字?
- 22. 反射不適用於CCScene,爲什麼?
- 23. 爲什麼反射速度很慢?
- 24. Scala反射 - 爲什麼TypeTag和Type?
- 25. Scala 2.10有什麼反射功能?
- 26. 爲什麼在.NET中投射速度比反射速度快?
- 27. 爲什麼我的包沒有通過?
- 28. 反射:顯示靜態類型的字節碼類型簽名
- 29. 反射沒有找到嵌套類型的受保護字段
- 30. 爲什麼boto沒有返回寫入S3的字節數?
很酷,我沒有意識到它被語言規範定義爲別名。 (爲什麼符文是'int32'而不是'uint32',呵呵?) – chowey
很難說!字節必須是無符號的,因爲所有的值都是有效的,並且約定它們是0-255。對於Unicode代碼點,他們有一個選擇,因爲不超過2^31個代碼點。我認爲他們更喜歡在某些地方簽名ints(比如數組索引),因爲unsigned wraparound('0-1 == 0xffffffff')可能不直觀。另一方面,位移量被定義爲uint! (也許這是因爲試圖進行負面轉變可能會以與架構相關的方式發生奇怪的行爲,而不僅僅是因爲慣例而失效。) – twotwotwo