go学习笔记(2)

来源:互联网 发布:app交友软件排行 编辑:程序博客网 时间:2024/06/06 09:09

继续学习一下go基础,记录一下今天看的视频案例。go编程提倡组合的方式,对于类,继承在go语言当中体现得并不明显。结构体和c编程中的类似。当中还是有差别,用其他语言套反而并不适合go里面的概念。猜测C大神讨厌java的一套下来的继承。

定义一个结构体

type 名称 struct

添加变量

type 名称 struct {   Name string   Level int}type player struct {   Name string   Level int}

初始化一个结构体

a:=player{ Name:"google", Level:100 } 

定义一下结构体,并使用结构体。当中还需要注意是值传递和引用的使用。当中还需要运用指针的设计。

package mainimport (    "fmt")type player struct {    Level int    Name  string}func main() {    a := player{        Level: 11,        Name:  "Google",    }    fmt.Println("Player", a)    showPlayerInfo(a)    fmt.Println("Player", a)    showPlayerInfo2(&a)    fmt.Println("Player", a)}func showPlayerInfo(obj player) {    obj.Level = 100    fmt.Println("Level", obj.Level)}func showPlayerInfo2(obj *player) {    obj.Level = 13    fmt.Println("Level", obj.Level)}

希望修改一个变量的时候,加入指针地址,例如&a,

showPlayerInfo2(&a)fmt.Println("Player", a)func showPlayerInfo2(obj *player) {    obj.Level = 13    fmt.Println("Level", obj.Level)}

如果觉得每次添加&a繁琐,同样可以将其修改成这样。

    a := &player{        Level: 11,        Name:  "Google",    }    showPlayerInfo2(a)    fmt.Println("Player", a)

结构体,还可以定义匿名

    b := &struct {        Level int        Name  string    }{        Level: 900,        Name:  "Jack",    }    fmt.Println("Player", b)


结构体嵌套写法

package mainimport (    "fmt")type money struct {    Total int}type player struct {    Level int    Name  string    money}func main() {    //使用嵌套的结构体    c := player{Level: 100, Name: "baidu", money: money{Total: 200}}    fmt.Println("写法一", c.money.Total) //写法一 200    fmt.Println("写法二", c.Total)  //写法二 200}

嵌套组合的方式在初始化的时候,引用组合属性的时候可以使用两种访问方式。加上money会区分来自不同的结构体。

c.money.Totalc.Total

同名属性的处理

package mainimport (    "fmt")type money struct {    Total int}type stone struct {    Total int}type player struct {    Level int    Name  string    money    stone}func main() {    //使用嵌套的结构体    c := player{Level: 100, Name: "baidu", money: money{Total: 200}, stone: stone{Total: 999}}    fmt.Println("写法一", c.money.Total)    fmt.Println("写法二", c.stone.Total)}

结构体里面player 中引入了money stone 两个结构体,这里为了区分不同的属性Total,这个时候采用第一种方式c.Total就会运行过程出错。为了区分,需要加上引用区分来自不同的Total

c.money.Total  //来自money的Total属性 c.stone.Total  //来自stone的Total属性