国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Golang struct 結構體注意事項和使用細節(jié)

這篇具有很好參考價值的文章主要介紹了Golang struct 結構體注意事項和使用細節(jié)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

結構體所有字段在內存當中是連續(xù)的


Golang struct 結構體注意事項和使用細節(jié),Go  面向對象編程結構體 struct,golang

type Point struct {
	x, y int
}

type Rect struct {
	left, up Point
}

func main() {
	r := Rect{
		left: Point{
			x: 16,
			y: 18,
		},
		up: Point{
			x: 19,
			y: 20,
		},
	}
	fmt.Printf("%p,%p \n", &r.left, &r.up)
	fmt.Printf("%p,%p,%p,%p", &r.left.x, &r.left.y, &r.up.x, &r.left.y)
}

0xc0000141a0,0xc0000141b0
0xc0000141a0,0xc0000141a8,0xc0000141b0,0xc0000141a8

?一個int類型剛好8個字節(jié)。可以看到結構體的字段在內存當中是連續(xù)分布的,通過地址的加減來找到對應的數(shù)據(jù)。

可以看到指針的地址也是連續(xù)的,r有兩個*point類型,這個兩個*Point類型的本身地址也是連續(xù)的,但是他們指向的地址不一定是連續(xù)。

結構體轉換


結構體是用戶單獨定義的類型,和其它類型進行轉換時需要有完全相同的字段(字段、個數(shù)和類型)?

type A struct{
    Num int
}

type B struct{
    Num int
}

func main(){
    var a A
    var b B
    b=B(a)//這里正確嗎?
}

字段名稱,字段類型,字段個數(shù)都得一致才可以轉。?

Golang struct 結構體注意事項和使用細節(jié),Go  面向對象編程結構體 struct,golang

tag 結構體標簽 結構體序列化


Golang struct 結構體注意事項和使用細節(jié),Go  面向對象編程結構體 struct,golang

Golang struct 結構體注意事項和使用細節(jié),Go  面向對象編程結構體 struct,golang

結構體字段是大寫的,這樣是為了能夠在別的包中使用。

序列化的概念就是將一個變量序列化為字符串然后再返回給客戶端。這個字符串有個通用的格式就是json,別人返回字段并不希望是大寫的,更加希望返回的json字段是小寫的。

這個時候就可以給結構體加上tag,在tag里面可以指定小寫的字段。這樣不僅僅可以在其他包中訪問你的字段,并且可以將你大寫的字段名改為希望的字段名稱。

在使用json包的Marshal方法的時候,相當于在別的包,也就是在別的包里面訪問結構體變量了。如果你的結構體變量是小寫的,那么根據(jù)作用域的原則,那么在json的Marshal方法里面是訪問不到這些小寫的變量的,無法序列化,因此只可以大寫。但是大寫序列化之后的結果是大寫,這樣就需要使用tag。

json的Marshal函數(shù)當中使用了反射。?文章來源地址http://www.zghlxwxcb.cn/news/detail-672334.html

  • 字段大寫就可以序列化??
  • tag序列化后小寫的字符串通過網(wǎng)絡返回給客戶端
package main

import (
	"encoding/json"
	"fmt"
)

type Person struct {
	Name  string `json:"username"`
	Age   int    `json:"age"`
	phone string `json:"phone"`
}

func main() {
	p := &Person{
		Name:  "lucas",
		Age:   29,
		phone: "123456",
	}

	//將person序列化為json格式字符串
	if data, err := json.Marshal(p); err != nil {
		fmt.Println(err.Error())
	} else {
		fmt.Println(string(data))
	}

	d, _ := json.Marshal(p)
	var p1 Person
	json.Unmarshal(d, &p1)
	fmt.Printf("%#v", p1)

}

{"username":"lucas","age":29}
main.Person{Name:"lucas", Age:29, phone:""}

到了這里,關于Golang struct 結構體注意事項和使用細節(jié)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 結構體的使用和結構體指針的定義注意事項

    結構體的使用和結構體指針的定義注意事項

    1、使用背景 ? ? ?由于想把不同地方的三個變量數(shù)據(jù)存放在一個結構體中,并且調用W25QXX_Write((u8*)p,FLASH_SIZE-100,SIZE); //從倒數(shù)第100個地址處開始,寫入SIZE長度的數(shù)據(jù)。調用flash寫數(shù)據(jù)函數(shù),其參數(shù)為指針地址,于是需要定義一個結構體和指向結構體的指針,這樣調用flash寫函數(shù)

    2024年01月20日
    瀏覽(23)
  • UDP 的報文結構及注意事項

    UDP 的報文結構及注意事項

    無連接:知道對端的IP和端口號就直接進行傳輸,不需要建立連接。 不可靠:即使因為網(wǎng)絡故障等原因無法將數(shù)據(jù)報發(fā)送給接收端,UDP協(xié)議層也不會給應用層返回任何錯誤信息。 全雙工:即可以接收數(shù)據(jù)報,也可以發(fā)送數(shù)據(jù)報 面向數(shù)據(jù)報:應用層交給UDP多長的報文,UDP原樣

    2024年02月06日
    瀏覽(15)
  • UDP的報文結構和注意事項

    UDP的報文結構和注意事項

    UDP的報文結構如圖: 畫成一行會比較好理解: 主要由兩部分組成:UDP報頭和UDP載荷。 UDP載荷其實就是數(shù)據(jù)。 UDP報頭分為四個部分,每個部分占兩個字節(jié)。 源端口 目的端口 報文長度 校驗和 下面介紹報頭里各個部分的作用。 源端口和目的端口各占2字節(jié) (Byte) ,端口號范圍:

    2024年02月01日
    瀏覽(15)
  • 【正點原子STM32】認識HAL庫(CMSIS、STM32Cube固件包、HAL庫框架結構、使用HAL庫、注意事項)

    【正點原子STM32】認識HAL庫(CMSIS、STM32Cube固件包、HAL庫框架結構、使用HAL庫、注意事項)

    一、初識HAL庫 1.1、CMSIS簡介 1.2、HAL庫簡介 二、STM32Cube固件包淺析 2.1、如何獲取STM32Cube固件包? 2.2、STM32Cube固件包文件夾簡介 2.3、CMSIS文件夾關鍵文件 三、HAL庫框架結構 3.1、HAL庫文件夾結構 3.2、HAL庫文件介紹 3.3、HAL庫API函數(shù)和變量命名規(guī)則 四、如何使用HAL庫 4.1、基于CM

    2024年02月21日
    瀏覽(32)
  • 【08】STM32·HAL庫開發(fā)-HAL庫介紹 | STM32Cube固件庫介紹 | HAL庫框架結構 | 如何使用HAL庫及使用注意事項

    【08】STM32·HAL庫開發(fā)-HAL庫介紹 | STM32Cube固件庫介紹 | HAL庫框架結構 | 如何使用HAL庫及使用注意事項

    ??CMSIS (微控制器 軟件接口標準 ):Cortex Microcontroller Software Interface Standard,是由ARM和與其合作的芯片廠商( 比如ST、NXP公司等 )、軟件工具廠商( Keil、IAR公司等 ),共同制定的標準。 如果沒有此標準,ARM公司的產(chǎn)品兼容性非常差。 ??下圖中分為三層,第一層是用戶層

    2024年02月11日
    瀏覽(24)
  • 學習Linux的注意事項(使用經(jīng)驗;目錄作用;服務器注意事項)

    學習Linux的注意事項(使用經(jīng)驗;目錄作用;服務器注意事項)

    本篇分享學習Linux過程中的一些經(jīng)驗 Linux嚴格區(qū)分大小寫 Linux中所有內容以文件形式保存 ,包括硬件,Linux是以管理文件的方式操作硬件 硬盤文件是 /dev/sd[a-p] 光盤文件是 /dev/sr0 等 對于設置需要寫入文件,命令行的設置在重啟之后就會失效,只有下入文件才可以保存下來 文

    2024年02月11日
    瀏覽(48)
  • grpc流式使用和注意事項

    流式grpc Server-side streaming RPC:服務器端流式 RPC Client-side streaming RPC:客戶端流式 RPC Bidirectional streaming RPC:雙向流式 RPC 客戶端代碼 服務端代碼 驗證 分析 [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-eRmLdnpt-1622633151060)(readme.assets/image-202105271114

    2023年04月10日
    瀏覽(23)
  • TheadLocal的使用場景和注意事項

    在多線程編程中,數(shù)據(jù)共享和線程安全問題是一個很大的挑戰(zhàn)。為了解決這個問題,Java 提供了 ThreadLocal 類,它能夠讓每個線程維護自己獨立的變量副本。 ThreadLocal 的作用就是:為每個線程創(chuàng)建一個獨立的變量副本,使得每個線程都可以操作自己的變量,而不會影響其他線程

    2024年02月07日
    瀏覽(21)
  • 6 使用強制類型轉換的注意事項

    概述 ????????在C語言中,強制類型轉換是通過直接轉換為特定類型的方式來實現(xiàn)的,類似于下面的代碼。 ????????這種方式可以在任意兩個類型間進行轉換,太過隨意和武斷,很容易帶來一些難以發(fā)現(xiàn)的隱患和問題。C++為了向下兼容,保留了這種方式,但新增了四個

    2023年04月08日
    瀏覽(15)
  • Unity之Addressable使用注意事項

    Unity之Addressable使用注意事項

    Profile文件中配置資源構建路徑和資源首次加載路徑,資源如何設置了緩存,在首次加載之后會將再用緩存在緩存目錄,后面將直接從緩存目錄中讀取,方便項目發(fā)包時候進行使用 AddressableAssetSettings文件 DisableCatalogUpdateOnStartup 勾選改選項,禁止自動更新,項目資源下載一般需

    2024年02月08日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包