结构体
一个结构体中可以嵌套包含另一个结构体或结构体指针,就像下面的示例代码那样。
/**
* @Author: wyd
* @Description:
* @File: 结构体嵌套
* @Version: 1.0.0
* @Date: 2022/7/7 14:59
* @Blog: https://wuyandao.blog.csdn.net/
*/
package main
import "fmt"
type Address struct {
City string
Province string
UpdateTime string
}
type Email struct {
Addr string
UpdateTime string
}
type Person struct {
Name string
Age int
Gender string
Address Address //嵌套
Email Email
}
func main() {
p1 := Person{
Name: "伟子",
Age: 18,
Gender: "男",
Address: Address{
"沙河",
"北京",
"2019-0701",
},
}
fmt.Printf("%#v\n", p1)
fmt.Println(p1.Name, p1.Age, p1.Gender, p1.Address)
fmt.Println(p1.Address.City)
}
数组
Array(数组)
数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。 基本语法:
// 定义一个长度为3元素类型为int的数组a
var a [3]int
package main
import "fmt"
func main() {
//数组的长度是类型的一部分
var a1 [3]bool
var a2 [4]bool
fmt.Printf("a1:%T a2:%T", a1, a2)
//初始化1
a1 = [3]bool{true, true, true}
//初始化2
a3 := [...]int{1, 5, 8, 6, 8, 4, 23, 1}
fmt.Println(a3)
//初始化3
a4 := [5]int{0: 1, 4: 2}
fmt.Println(a4)
//数组遍历
citys := [...]string{"北京", "天津", "南京", "河津"}
//1根据索引遍历
for i := 0; i < len(citys); i++ {
fmt.Println(citys[i])
}
//2for range
for i, v := range citys {
fmt.Println(i, v)
}
//多维数组
var a5 [3][2]int
a5 = [3][2]int{
[2]int{1, 2},
[2]int{3, 4},
[2]int{5, 6},
}
fmt.Println(a5)
//遍历
for _, v1 := range a5 {
fmt.Println(v1)
for _, v2 := range v1 {
fmt.Println(v2)
}
}
//数组是值类型
b1 := [3]int{1, 2, 3}
b2 := b1
b2[0] = 100
fmt.Println(b1, b2)
}
面试题分金币
你有50枚金币,需要分配给以下几个人:Matthew,Sarah,Augustus,Heidi,Emilie,Peter,Giana,Adriano,Aaron,Elizabeth。
分配规则如下:
a. 名字中每包含1个’e’或’E’分1枚金币
b. 名字中每包含1个’i’或’I’分2枚金币
c. 名字中每包含1个’o’或’O’分3枚金币
d: 名字中每包含1个’u’或’U’分4枚金币
写一个程序,计算每个用户分到多少金币,以及最后剩余多少金币?
package main
import (
"fmt"
"strings"
)
var (
coins = 50
users = []string{
"Matthew", "Sarah", "Augustus", "Heidi", "Emilie", "Peter", "Giana", "Adriano", "Aaron", "Elizabeth",
}
distribution = make(map[string]int, len(users))
)
func main() {
left := dispatchCoin()
fmt.Println("剩下:", left)
}
func dispatchCoin() (left int) {
for _, name := range users {
coin := countCoin(name)
distribution[name] = coin
fmt.Printf("%s 的金币为:%d\n", name, coin)
}
result := 0
for _, value := range distribution {
result += value
}
fmt.Printf("总使用的金币: %d\n", result)
return coins - result
}
func countCoin(name string) (result int) {
if &name != nil {
name = strings.ToUpper(name)
bs := []byte(name)
result = 0
for _, value := range bs {
if value == 'E' {
result++
} else if value == 'I' {
result += 2
} else if value == 'O' {
result += 3
} else if value == 'U' {
result += 4
}
}
return
}
return 0
}