go 修改結構體方法 go結構體方法

2021-10-16 21:40:00 字數 2880 閱讀 7938

golang中的方法是作用在特定型別的變數上,因此自定義型別,都可以有方法,而不僅僅是struct。

定義格式

func (var *struct_name) funcname( var0, var1... ) return type {}

package main

import (

"fmt"

type test struct {

name string

age int

func (v *test) getlist() {

fmt.println("getlist")

func main() {

var s = new(test)

s.getlist()

golang中結構體方法沒有建構函式,可以自己定義並執行建構函式

package main

import (

"fmt"

type test struct {

name string

age int

func (this *test) init(name string, age int) {

this.name = name

this.age = age

func (this *test) getname() string {

return this.name

func (this *test) getage() int {

return this.age

func main() {

var s = new(test)

s.init("zhangsan", 20)

fmt.println(s.getname())

fmt.println(s.getage())

自行呼叫初始化方法來實現建構函式的作用

給乙個型別取別名

package main

import "fmt"

type integer int

func (this integer) test() {

fmt.println("print integer")

type test struct {

name string

age int

func main() {

var i = new(integer)

i.test()

結構體是使用者單獨定義的型別,不能和其他型別進行強制轉換

package main

type integer int

func main() {

var i integer

i = 100

var n = 10

n = i

結構體是值型別的,改變的是內部的副本。

package main

import (

"fmt"

type integer int

func (this integer) get() {

fmt.println(this)

func (this integer) set(num integer) {

this = num

func main() {

var i integer

i = 100

i.set(1999)

fmt.print(i)

package main

import (

"fmt"

type integer int

func (this integer) get() {

fmt.println(this)

func (this *integer) set(num integer) {

*this = num

func main() {

var i integer

i = 100

(&i).set(1999) //= i.set(1999)

fmt.print(i)

方法的訪問控制也是通過控制的

結構體繼承

如果乙個struct巢狀了另乙個匿名結構體,那麼這個結構可以直接訪問 匿名結構體的方法,從而實現了繼承。

結構體方法的繼承

package main

import (

"fmt"

type test struct {

name int

age int

func (this test) getname() int {

return this.name

type test1 struct {

test

func main() {

var t test1

t.name = 123

var name = t.getname()

fmt.println(name)

如果乙個struct巢狀了另乙個匿名結構體,那麼這個結構可以直接訪問 匿名結構體的方法,從而實現了繼承。

如果乙個struct巢狀了另乙個有名結構體,那麼這個模式就叫組合。

package main

import (

"fmt"

type test struct {

name int

age int

func (this test) getname() int {

return this.name

type test1 struct {

t test

func main() {

var t test1

t.t.name = 123

var name = t.t.getname()

fmt.println(name)

原文:

Go 結構體,結構體指標和方法

結構體 講乙個或多個變數組合到一起形成新的型別,這個型別就是結構體,結構體是值型別 定義結構體和賦值 learn go main.go package main import fmt type people struct func main fmt.printf p peo 0x110040f0 賦...

go 結構體和方法

結構體型別的字面量由關鍵字type 型別名稱 關鍵字struct,以及由花括號包裹的若干字段宣告組成。type person struct person 鍵值對的順序與其型別中的字段宣告完全相同的話,我們還可以統一省略掉所有欄位的名稱 person 結構體型別的值字面量時可以只對它的部分字段賦值,甚...

go語言結構體

go語言陣列可以儲存同一型別的資料 但在結構體中我們可以為不同項定義不同的資料型別 結構體是由一系列具有相同的型別或者不同型別的資料構成的資料集合 1.定義結構體 結構體定義需要使用type和struct語句。struct語句定義乙個新的資料型別,結構體中有乙個或者多個成員。type語句設定了結構體...