订阅博客
收藏博客
微博分享
QQ空间分享

go语言学习笔记第四天

频道:go语言 标签: 时间:2019年08月29日 浏览:37次 评论:0条
作者: 三只松果

go语言学习笔记第四天

字符串包strings的用法

import  s  strings

var p = fmt.Println

“Pasted Graphic 1”的副本.png


Rand包生成随机数常用方法

func rand1() string {

    rand.Seed(time.Now().UnixNano())

    byt := [10]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}

    var buf bytes.Buffer

    for i := 0; i < 3; i++ {

        fmt.Fprintf(&buf, "%d", byt[rand.Intn(10)])

    }

    return buf.String()

}

Time包字符串转时间

func StrToTime(s string) (time.Time, error) {

    timeTemplate := "2006-01-02 15:04:05"

    t, err := time.ParseInLocation(timeTemplate, s, time.Local)

    return t, err

}

时间转字符串

func TimeToStr(t int64) string {

    timeTemplate := "2006-01-02 15:04:05"

    return time.Unix(t, 0).Format(timeTemplate)

}

结构体(值类型)

结构体的大小为他的每个属性大小的和

结构体首字母大写的可以在其他包调用该结构体,小写的不行,结构体的属性和方法也一样

结构体声明

type  Employee struct{

firstName string

lastName string

age  int

}

三种初始化方法

    var em1 Employee

    em1.firstName = "AA"

    em2 := Employee{"AA", "BB", 22}

    em3 := Employee{

        firstName: "AAA",

        age:       20,

    }

结构体指针

    em4 := &Employee{

        firstName: "zhangsan",

    }

使用该结构体指针:(*em4).firstName

注:用(*em4).firstNameem4.firstName都可以,内部会自动转换

结构体嵌套 

type Person struct {

    name    string

    age     int

    address Address

}

type Address struct {

    city  string

    state string

}

字段提阶

将嵌套的字段写成匿名字段

type Person struct {

    name    string

    age     int

    Address

}

提阶以后Person的对象可以直接访问Address里面的属性

person.city等于原来的person.address.city

提阶后也可以用person.Address.city访问


结构体比较

user1 := model.New("zhangsan", "131231")

    user2 := model.New("zhangsan", "131231")

    fmt.Println(user1, user2)

    if *user1 == *user2 {

        fmt.Println("user1==user2")

    }


结构体为值类型,可以直接比较,但是当结构体中含有不可直接比较的字段(如map)时就不能比较

结构体作为参数传递

传值(里面修改后不会影响到外面的值)

func testPersonA(p Person) {

    p.Age = 30

}

传指针(里面修改后会影响到外面的值)

func testPersonB(p *Person) {

    p.Age = 30

}

使用数组指针访问内部成员时可以省略*,但是使用切片指针访问内部成员时不可以省略*,必须解引用后才能访问内部成员

结构体指针切片的使用

    slices := make([]*Person, 2)

    slices[0] = &Person{"zhangsan", 20}

    slices[1] = &Person{"lisi", 30}

    testPersonC(slices)

    for _, v := range slices {

        fmt.Println(*v)

    }


func testPersonC(s []*Person) {

    s[0].Age = 50

    obj := s[1]

    obj.Age = 50

}

输出结果:

{zhangsan 50}

{lisi 50}


◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。