golang什么時(shí)候用指針 c 里面,傳入一個(gè)結(jié)構(gòu)體指針,如何將該指針指向的結(jié)構(gòu)體賦值給另一個(gè)結(jié)構(gòu)體實(shí)例呢?
c 里面,傳入一個(gè)結(jié)構(gòu)體指針,如何將該指針指向的結(jié)構(gòu)體賦值給另一個(gè)結(jié)構(gòu)體實(shí)例呢?“不知道結(jié)構(gòu)的具體定義”是否意味著沒(méi)有相應(yīng)的頭文件?如果是這種情況,則無(wú)法通過(guò)指針直接訪問(wèn)opaque的實(shí)例,除非此結(jié)
c 里面,傳入一個(gè)結(jié)構(gòu)體指針,如何將該指針指向的結(jié)構(gòu)體賦值給另一個(gè)結(jié)構(gòu)體實(shí)例呢?
“不知道結(jié)構(gòu)的具體定義”是否意味著沒(méi)有相應(yīng)的頭文件?如果是這種情況,則無(wú)法通過(guò)指針直接訪問(wèn)opaque的實(shí)例,除非此結(jié)構(gòu)定義的庫(kù)還提供相應(yīng)的API操作,例如復(fù)制和修改。其原因可能是設(shè)計(jì)中有意保留了結(jié)構(gòu)變化的靈活性。例如,當(dāng)您需要添加一個(gè)新成員(intz)時(shí),它對(duì)客戶代碼沒(méi)有影響。當(dāng)庫(kù)升級(jí)時(shí),實(shí)現(xiàn)此目標(biāo)的所有其他黑客手段都可能導(dǎo)致代碼中的未定義行為。如果有一個(gè)定義,就更容易不想一個(gè)接一個(gè)地賦值。PLD struct應(yīng)該有一個(gè)默認(rèn)構(gòu)造函數(shù)。您可以嘗試使用message MS1(*MS);或者message MS1=*MS,默認(rèn)情況下是淺拷貝。純值問(wèn)題不大,但當(dāng)有指針在其中時(shí),情況就非常復(fù)雜了。您需要避免MS1的操作影響MS pointer的內(nèi)容。在這種情況下,編譯器將發(fā)出警告。
golang不用反射怎么獲取到結(jié)構(gòu)體成員名稱和指針?
對(duì)于要操作的對(duì)象名稱的每個(gè)字段,可以使用不安全包和反射包的偏移量?jī)H反射一次,然后使用非安全指針然后計(jì)算偏移量,并緩存指向此字段的指針。這種方法比較實(shí)用。