go语言学习笔记第四天
go语言学习笔记第四天
字符串包strings的用法
import s “strings”
var p = fmt.Println
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).firstName和em4.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}
除非注明,否则文章均由 松果笔记 整理发布,欢迎转载。
转载请注明本文地址:http://sgnote.cn/?id=52