Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah refleksi jenis untuk jenis tersirat berfungsi?

Bagaimanakah refleksi jenis untuk jenis tersirat berfungsi?

王林
Lepaskan: 2024-02-06 09:30:08
ke hadapan
939 orang telah melayarinya

Bagaimanakah refleksi jenis untuk jenis tersirat berfungsi?

Kandungan soalan

Setakat yang saya faham, go ditaip secara statik dan biasanya tidak melakukan penukaran jenis tersirat. Oleh itu, pemalar tanpa pengisytiharan jenis eksplisit adalah tertakluk kepada keperluan pada penggunaan pertama.

Jadi, dalam coretan kod di bawah, saya mahu nfloat64,因为这就是 math.sin 所期望的。但是当打印出反射类型时,我看到了 int.

package main

import (
    "fmt"
    "math"
    "reflect"
)

func main() {
    const n = 5000 // No explict type

        // fmt.Println(reflect.TypeOf(n)) // this would print "int"

    fmt.Println(math.Sin(n)) // math.Sin expects a float64

    fmt.Println(reflect.TypeOf(n)) // print "int"
}
Salin selepas log masuk

Apa yang berlaku di sini? n 实际上有隐式 int 类型吗?或者反射不会显示这样的实际类型情况?我不认为 math.sin sedang menaip hujahnya kerana jika saya menyatakan jenis eksplisit, pengkompil akan menimbulkan ralat.


Jawapan betul


[Jenis pemalar yang tidak ditaip] adalah berdasarkan keperluan pada penggunaan pertama.

Di sinilah anda silap. Satu jenis dipilih secara bebas untuk setiap kegunaan.

math.Sin memerlukan hujah float64, jadi pengkompil mesti memilih float64 di sini.

reflect.TypeOf mengambil hujah antara muka{}, jadi pengkompil bebas untuk memilih sebarang jenis angka (kerana mereka semua melaksanakan antara muka kosong). Jenis integer lalai dipilih di sini: int.

Atas ialah kandungan terperinci Bagaimanakah refleksi jenis untuk jenis tersirat berfungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan