go语言学习笔记

结构体

一个结构体中可以嵌套包含另一个结构体或结构体指针,就像下面的示例代码那样。

/**
 * @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
}

在这里插入图片描述

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yyysec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值