Go語言第九課 結構體與介面

2021-08-20 18:20:12 字數 4595 閱讀 7478

go是一門面向過程的語言,沒有類。但是類似於c,有結構體。

go語言還有乙個神奇的地方,沒有pubic或者private。包級元素+大寫開頭=可匯出,可匯出意味著包外可訪問。

其實go裡面沒有繼承,有的只是struct的嵌入(官方叫法「嵌入」)

package inheritance

import "fmt"

type fatherclass struct

func (this fatherclass) dohello()

package inheritance

type sonclass struct

package main

import (

"./inheritance"

"fmt"

)func main()

son.name = "aaa"

son.age = 11

son.schoolname = "bbb"

son.dohello()

son.fatherclass.dohello()

fmt.println(son.dohello)

fmt.println(son.fatherclass.dohello)

}

aaa --> say **** hello

aaa --> say **** hello

0x4877f0

0x4877f0

但是值得注意的是

package main

import (

"./inheritance"

)func main()

son.name = "aaa"

son.age = 11

son.schoolname = "bbb"

son.dohello()

var father inheritance.fatherclass

father=son

father.dohello()

}

father=son會導致錯誤

cannot use son (type inheritance.sonclass) as type inheritance.fatherclass in assignment

說明go裡面的包含只是具有繼承的語法些特徵而已,並不是繼承!!!

結構體的成員變數可以是預定義型別也可以是結構體型別。

加入現在有個人,他有他自己的教育背景。我們再描述這種邏輯關係時可以使用結構體如下:

type edu_info struct 

type persion struct

需要注意的是:

· 結構體的成員變數會被賦予「預設初值」。而結構體自身的「預設初值」是所有成員變數「預設初值的集合」

· 結構體的成員變數用點「.」訪問

· 最神奇的一點:對結構體值指標的點操作和對結構體值的點操作是等價的

· 如果結構體成員變數是大寫開頭的,則這個成員變數是可匯出的。可匯出意味著在包外可訪問

· 乙個聚合型別的元素不能是自身型別,但是可以是自身型別的指標。結構體也是聚合型別,同樣遵循這樣的規則。

沒有任何成員的結構體就是空結構體,它的大小為0,不包含任何資訊。空結構體通常起到了佔位的作用。

package main

import "fmt"

type edu_info struct

type persion struct

func main()

fmt.println(empty_struct)

}

結果:

0010

a school

a school

{}順序賦值

yong := persion}

對應賦值

yong_1 := persion, name: "yuyong"}

package main

import "fmt"

type edu_info struct

type persion struct

func main() }

yong_1 := persion, name: "yuyong"}

fmt.println(yong)

fmt.println(yong_1)

}

執行結果}}

匿名成員是只有型別沒有變數名的成員。

package main

import "fmt"

type edu_info struct

type position struct

type persion struct

func main() , 100, position}

yong_1 := persion, name: "yuyong"}

yong_1.position.pos_name = "hr"

yong_1.phone = "1110"

yong_1.int = 100

fmt.println(yong)

fmt.println(yong_1)

}

100 }

100 }

package main

import (

"fmt"

"strconv"

"reflect"

)type persion inte***ce

type stu struct

type teacher struct

func (t teacher) sayhello(hello_word string) string

func (s stu) sayhello(hello_word string) string

func (t teacher) say****(hello_word string) string

func (s stu) say****(hello_word string) string

func main()

}

*main.stu

&my stu name is yuyong and hello --> 0

*main.teacher

&my tech id is 1001 and hello --> 1

package main

import "fmt"

type inte***ce_1 inte***ce

type inte***ce_2 inte***ce

type class_2 struct

func (this *class_2) func_2(input string) string

func (this *class_2) func_1(input string) string

func main()

11111111111-->aaaa

22222222222-->bbbb

11111111111-->cccc

11111111111-->eeee

22222222222-->ffff

package reflect

import (

"testing"

"fmt"

)type istudent inte***ce

type schoolchild struct

func (this *schoolchild) getname() string

func (this *schoolchild) setname(_name string)

type middleschoolstudent struct

func (this middleschoolstudent) getname() string

func (this middleschoolstudent) setname(_name string)

func testtype(t *testing.t)

fmt.println(yong.getname())

var guo istudent = middleschoolstudent

fmt.println(guo.getname())

}func testcopy(t *testing.t)

var i_yong istudent = yong

i_yong.setname("feifei")

fmt.println(yong.getname())

guo := schoolchild

var i_guo istudent = &guo

i_guo.setname("benben")

fmt.println(guo.getname())

}

yuyong

guoqing

yuyong

benben

C語言第九課

主要內容 高階指標 結構體指標 一 結構體指標 指向結構體變數的指標叫做結構體指標 typedef struct student student student stu student p stu student 結構體型別的指標 型別 p 結構體指標變數 變數名 結構體訪問成員變數 示例 type...

C語言第九課

儲存類 為變數提供了5種不同的儲存型別,即儲存類 按 以下的描述 儲存時期 作用域 鏈結static 的區域性變數 活死人為靜態變數 儲存類 1 自動變數 區域性變數 2 暫存器變數 用register 宣告為 暫存器變數 3 具有 塊作用域的靜態變數 static 區域性變數 4 具有外部鏈結的靜...

C語言 第九課

一 c語言的資料型別包括基本型別 整形,字元型,浮點型 指標型別 構造型別 陣列 共用體 結構體 列舉型別 和空型別。二 結構型別的宣告格式 struct 結構名 注意 color blue 大括號最後的分號不能忘記。color 三 宣告結構變數及賦初值 struct 結構名 結構變數 四 訪問乙個...