成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

go語言中的反射-創(chuàng)新互聯(lián)

反射是什么?

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、鐵東ssl等。為上千多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的鐵東網(wǎng)站制作公司

反射是一種計算機(jī)處理方式。有程序可以訪問、檢測和修改它本身狀態(tài)或行為的這種能力。能提供封裝程序集、類型的對象。(程序集包含模塊,而模塊包含類型,類型又包含成員。)Golang提供了一種機(jī)制,在編譯時不知道類型的情況下,可更新變量、運行時查看值、調(diào)用方法以及直接對他們的布局進(jìn)行操作的機(jī)制,稱為反射。

為什么使用反射?

打個比方,有時候我們需要一個函數(shù)可以處理各種類型的值。在不知道類型的情況下,你可能會這么寫:

// 偽代碼
switch value := value.(type) {
case string:
    // ...一些操作
case int:   
    // ...一些操作  
case cbsStruct: // 自定義的結(jié)構(gòu)體  
    // ...一些操作

// ...
}

有沒發(fā)現(xiàn)什么問題?

這邊存在一個問題:類型很多,這個函數(shù)會寫的非常長,而且還可能存在自定的類型,也就是說這個判斷日后可能還要一直改,因為無法知道未知值到底屬于什么類型。

無法透視一個未知類型的時候,以上代碼其實不是很合理,這時候就需要有反射來幫忙你處理,反射使用TypeOf和ValueOf函數(shù)從接口中獲取目標(biāo)對象的信息,輕松完成目的。

3.反射具體能做什么?

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var name string = "咖啡色的羊駝"

    // TypeOf會返回目標(biāo)數(shù)據(jù)的類型,比如int/float/struct/指針等
    reflectType := reflect.TypeOf(name)

    // valueOf返回目標(biāo)數(shù)據(jù)的的值,比如上文的"咖啡色的羊駝"
    reflectValue := reflect.ValueOf(name)

    fmt.Println("type: ", reflectType)
    fmt.Println("value: ", reflectValue)
}

golang中提供了reflect包對反射的支持,其中主要的有兩個方法和兩個struct(準(zhǔn)確的說是一個struct和一個interface),用來分別獲取和操作接口變量的動態(tài)類型和動態(tài)值。

兩個方法:

func TypeOf(i interface{}) Type {...} 該方法接收一個空接口類型的變量,實參會被復(fù)制一份,并轉(zhuǎn)換為空接口變量,最終作為TypeOf的參數(shù)。

在函數(shù)內(nèi)部會將接口變量的動態(tài)類型信息取出,并封裝到reflect.Type返回,因為reflect.Type是一個接口,真正使用的是接口的實例,在這里真正的實例是reflect.rtype。

func ValueOf(i interface{}) Value {...} 與TypeOf 函數(shù)類型,接收的也是一個副本,然后轉(zhuǎn)為空接口變量,在方法內(nèi)部取出接口變量的動態(tài)值,然后封裝為一個reflect.Value對象返回。

以上就是golang反射重要嗎的詳細(xì)內(nèi)容,更多請關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!

文章題目:go語言中的反射-創(chuàng)新互聯(lián)
文章分享:http://jinyejixie.com/article4/disioe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、手機(jī)網(wǎng)站建設(shè)、做網(wǎng)站、用戶體驗網(wǎng)站制作、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
平塘县| 崇礼县| 衡阳县| 邵阳县| 云龙县| 望都县| 海淀区| 镇沅| 海盐县| 江山市| 宁武县| 两当县| 合阳县| 赤水市| 泗阳县| 呼图壁县| 台南县| 湖南省| 五台县| 梓潼县| 昌邑市| 湾仔区| 安仁县| 长子县| 仙游县| 夏邑县| 格尔木市| 电白县| 文昌市| 石林| 涞源县| 乌拉特前旗| 鸡泽县| 邳州市| 龙井市| 雷州市| 宜都市| 福安市| 涡阳县| 二手房| 昭苏县|