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

Bagaimanakah refleksi jenis untuk jenis tersirat berfungsi?

王林
王林ke hadapan
2024-02-06 09:30:08934semak imbas

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"
}

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam