1. 程式人生 > >09.go語言結構體、值接受者/指標接受者、指標和值

09.go語言結構體、值接受者/指標接受者、指標和值

1.結構體

package main

import (
“log”
)

//結構體
type user struct {
name string
email string
ext int
privileged bool
}

//巢狀結構體
type admin struct {
person user
level string
}

func main() {

lisa := user{name: "Lisa",
    email:      "[email protected]
", ext: 123, privileged: true} log.Println(lisa) fred := admin{ person: user{ name: "Lisa", email: "[email protected]", ext: 123, privileged: true}, level: "super", } log.Println(fred)

}

2.使用指標接收者宣告的方法

:呼叫時會使用這個值的一個副本來執行
使用值接受者宣告方法



// 這個示例程式展示如何宣告
// 並使用方法
package main

import (
    "fmt"
)

// user 在程式裡定義一個使用者型別
type user struct {
    name  string
    email string
}

// notify 使用值接收者實現了一個方法
func (u user) notify() {
    fmt.Printf("Sending User Email To %s<%s>\n",
        u.name,
        u.email)
}

// changeEmail 使用指標接收者實現了一個方法
func (u *user) changeEmail(email string) { u.email = email } // main 是應用程式的入口 func main() { // user 型別的值可以用來呼叫 // 使用值接收者宣告的方法 bill := user{"Bill", "[email protected]"} bill.notify() // 指向 user 型別值的指標也可以用來呼叫 // 使用值接收者宣告的方法 lisa := &user{"Lisa", "[email protected]"} //此處可以理解為(*lisa).notify() //notify 操作的是一個副本,只不過這次操作的是 //從 lisa 指標指向的值的副本 lisa.notify() // user 型別的值可以用來呼叫 // 使用指標接收者宣告的方法 bill.changeEmail("[email protected]") bill.notify() // 指向 user 型別值的指標可以用來呼叫 // 使用指標接收者宣告的方法 lisa.changeEmail("[email protected]") lisa.notify() }

總結一下,
值接收者使用值的副本來呼叫方法,
而指標接受者使用實際值來呼叫方法。

3.傳遞指標和值的區別

package main

import (
    "log"
)

type user struct {
    name  string
    email string
}

func (u user) notify(temp int) {
    temp = 124
    log.Println(temp)

}

func (u user) notify2(temp *int) {
    *temp = 250
    log.Println(*temp)
}

// main 是應用程式的入口
func main() {
    bill := user{"a", "[email protected]"}
    temp := 123
    bill.notify(temp)
    log.Println(temp)

    bill.notify2(&temp)
    log.Println(temp)

}

相關推薦

09.go語言結構接受者/指標接受者指標

1.結構體 package main import ( “log” ) //結構體 type user struct { name string em

Go語言基礎(九)—— Go語言結構Go語言切片(Slice)range遍歷Go語言Map(集合)

Go語言結構體 Go 語言中陣列可以儲存同一型別的資料,但在結構體中我們可以為不同項定義不同的資料型別。 結構體是由一系列具有相同型別或不同型別的資料構成的資料集合。  結構體表示一項記錄,比如儲存圖書館的書籍記錄,每本書有以下屬性: Title :標題&nbs

go語言結構作為函數參數,采用的是傳遞

驗證 import 函數參數 分享 print d+ 技術分享 技術 point 經過驗證,go語言結構體作為函數參數,采用的是值傳遞。所以對於大型結構體傳參,考慮到值傳遞的性能損耗,最好能采用指針傳遞。 驗證代碼: package main impor

Go語言結構(struct)

手機 div -s 東京 log fmt lis int 不同類 Go 語言結構體 Go 語言中數組可以存儲同一類型的數據,但在結構體中我們可以為不同項定義不同的數據類型。 結構體是由一系列具有相同類型或不同類型的數據構成的數據集合。 結構體表示一項記錄,比如保存圖書館的書

GO語言學習(十六)Go 語言結構

指針 描述 ble title 設定 import spa 輸出 sub Go 語言結構體 Go 語言中數組可以存儲同一類型的數據,但在結構體中我們可以為不同項定義不同的數據類型。 結構體是由一系列具有相同類型或不同類型的數據構成的數據集合。 結構體表示一項記錄,比如

go語言結構陣列的指標作為引數。。。

package main import ( "fmt" ) type XCDataStu struct { Id int `json:"id" xorm:"id"` Name s

C語言結構數組內帶字符數組初始化

指定 char 字符數 全局 種類 def 變量 指針 變量定義 1.首先定義結構體數組: typedef struct BleAndTspRmtCmd{ char terminal[3]; char note[3]; char rmtCmd[10]; char cmdP

c語言結構可以直接賦

結構體直接賦值的實現 下面是一個例項: #include <stdio.h> struct Foo { char a; int b; double c; }foo1, foo2; //define two str

Go 語言結構

在我們開始學習 Go 程式語言的基礎構建模組前,讓我們先來了解 Go 語言最簡單程式的結構。 Go Hello World 例項 Go 語言的基礎組成有以下幾個部分: 包宣告 引入包 函式 變數 語句 & 表示式 註釋 接下來讓我們來看下簡單的程式碼,

貼上JNA—JNI終結者深入解析JNA—模擬C語言結構兩篇文章的完整原始碼

原文 http://blog.csdn.net/shendl/archive/2008/12/26/3599854.aspx 貼上 JNA—JNI 終結者 、 深入解析 JNA— 模擬 C 語言結構體 兩篇文章的完整原始碼 C 語言

C語言結構物件間直接賦

C語言中變數間互相賦值很常見,例如: int a,b; a = b; 結構體也是變數(自定義變數),兩個結構體之間直接賦值按道理應該也是可以的吧,說實話之前還從沒遇到過將一個結構體物件賦值給另一個結構體物件的(見識太淺),那麼下面做一個測試看看: #inc

貼上 JNA—JNI 終結者 深入解析 JNA— 模擬 C 語言結構 兩篇文章的完整原始碼 (續)...

原文 http://blog.csdn.net/shendl/archive/2008/12/26/3599854.aspx /** * @param args */ public static void main(String[] args

第22節 C語言結構結構巢狀結構指標結構陣列的程式碼實現

結構體 #include <stdio.h> //第一步 struct Student { //學號 int no; //姓名 char name[20]; //性別 char

C語言結構+陣列實現學生學號成績的統計排序

#include <stdio.h> #include <stdlib.h> #define N 32  struct student {  int num;  int sch;  }s[N]={{392,81},{304,80},{442,85},

Python使用struct模組轉換C語言結構,打包解包二進位制資料

本文是我使用socket測試網路介面寫的訊息頭,其中包含以下內容: (1)通過Python的struct模組將C的結構體轉換成Python語言(struct.Struct) (2)打包和解包(pack_into和unpack_from) (3)序列化和

做個筆記——C語言結構成員賦的一個小問題

#include<stdio.h> #include<string.h> //定義一個結構體,名為Student struct Student { int sid; int age; char name[200

在C語言結構中添加成員函數

我們 pau 打印 log print class 控制 stdio.h 語言   我們在使用C語言的結構體時,經常都是只定義幾個成員變量,而學過面向對象的人應該知道,我們定義類時,不只是定義了成員變量,還定義了成員方法,而類的結構和結構體非常的相似,所以,為什麽不想想如何

c語言結構大小 sizeof(struct A)

成員 print ble ret 意義 cnblogs () pan color 1,數據類型自身對齊 數據類型的起始地址為其大小的整數倍 2,結構體的自身對齊 結構體的自身對齊值為其中最大的成員大小 3,指定對齊 可以使用關鍵詞#pragma pack(1) 來指定結構體

C語言----結構---結構與函數

urn 全局變量 月的天數 [] strong ret 例子 c語言 += 結構作為參數的函數 整個結構可以作為參數傳入函數 這時是在函數中新建了一個結構變量,並復制調用這個結構的值(重點,只是把值傳入函數,而函數外面真正的變量並沒有改變,與數組不同) 函數也可以返

C語言結構作業

數列 class 系統 過程 函數功能 文字 inf not 類型 一、PTA實驗作業 題目1:6-3 結構體數組中查找指定編號人員 1. 本題PTA提交列表 2. 設計思路 定義一個結構體指針*p for i=0 to i=7 如果std+i的編號與輸入的編號