【GO】函数创建和使用

统计标语字符数

题目描述

编写函数 countChar(s string) int,返回字符串字符个数,用于统计标语字数。

输出示例

标语:为人民服务

字符数:5

实现代码

Go 复制代码
package main

import (
	"fmt"
	"unicode/utf8"
)

func countChar(s string) int {
	return utf8.RuneCountInString(s)
}

func main() {
	str := "为人民服务"
	fmt.Printf("标语:%s  \n字符数:%d\n", str, countChar(str))
}

求平均分

题目描述

写函数 calcAvg(nums []int) float64 接收成绩切片,计算并返回平均分

输出示例

班级成绩列表:[85 92 78 90 88]

平均分:86.60

实现代码

Go 复制代码
package main
import "fmt"

func calcAvg(nums []int) float64 {
	sum := 0
	for _, v := range nums {
		sum += v
	}
	return float64(sum) / float64(len(nums))
}

func main() {
	scores := []int{85, 92, 78, 90, 88}
	avg := calcAvg(scores)
	fmt.Printf("班级成绩列表:%v\n", scores)
	fmt.Printf("平均分:%.2f\n", avg)
}

统计单词频次

题目描述

编写函数 countWords(words []string) map[string]int,统计每个单词出现的次数。

输出示例

单词列表: [爱国 强国 爱国 人民 强国 强国]

统计结果: map[人民:1 爱国:2 强国:3]

实现代码

Go 复制代码
package main
import "fmt"

// 统计单词频次
func countWords(words []string) map[string]int {
	m := make(map[string]int)
	for _, w := range words {
		m[w]++
	}
	return m
}

func main() {
	list := []string{"爱国", "强国", "爱国", "人民", "强国", "强国"}
	resMap := countWords(list)
	fmt.Println("单词列表:", list)
	fmt.Println("统计结果:", resMap)
}

字符串拼接

题目描述

编写可变参数函数 joinStr( strs ...string ) string,把多个字符串拼接成一句。

  • 函数可以接收任意多个字符串
  • 函数内部将所有传入的字符串按顺序无缝拼接成一整句完整的话
  • 函数返回拼接后的最终字符串
  • 主函数中传入固定字符串:"强"、"国"、"复"、"兴"、"有"、"我",调用函数并打印结果

输出示例

拼接结果: 强国复兴有我

实现代码

Go 复制代码
package main

import "fmt"

// joinStr 可变参数函数:接收任意多个字符串,按顺序无缝拼接并返回
// strs ...string:可变参数,表示可以传入0个、1个或多个string类型参数
func joinStr(strs ...string) string {
	// 定义空字符串,用于存储拼接结果
	var result string
	// 遍历所有传入的字符串,逐个拼接到result中
	for _, str := range strs {
		result += str
	}
	// 返回最终拼接完成的字符串
	return result
}

func main() {
	// 调用可变参数函数,传入固定字符串:强、国、复、兴、有、我
	res := joinStr("强", "国", "复", "兴", "有", "我")

	// 打印输出结果
	fmt.Println("拼接后的字符串:", res)
}

两数运算(和、差、积)

题目描述

编写函数 calc(a,b int) (int,int,int) 返回:两数之和、两数之差、两数乘积。

输出示例

请输入第一个整数:10

请输入第二个整数:4

和 = 14

差 = 6

积 = 40

实现代码

Go 复制代码
package main

import "fmt"

// calc 函数:接收两个整数,返回 和、差、积
func calc(a, b int) (int, int, int) {
	sum := a + b // 和
	sub := a - b // 差
	mul := a * b // 积
	return sum, sub, mul
}

func main() {
	// 定义变量存储用户输入的数字
	var num1, num2 int

	// 提示用户输入
	fmt.Print("请输入第一个整数:")
	fmt.Scan(&num1)
	fmt.Print("请输入第二个整数:")
	fmt.Scan(&num2)

	// 调用多返回值函数
	sumRes, subRes, mulRes := calc(num1, num2)

	// 输出结果
	fmt.Println("和 =", sumRes)
	fmt.Println("差 =", subRes)
	fmt.Println("积 =", mulRes)
}

参数校验接口

题目描述

写函数 checkRegisterInfo(phone string, age int) (valid bool, errMsg string)命名返回:

  • valid:参数是否合法
  • errMsg:错误提示,合法为空

规则:

  • 手机号必须 11 位
  • 年龄 16~60 才能注册

输出示例

请输入手机号:13812345678

请输入年龄:22

参数校验通过,可以注册

实现代码

Go 复制代码
package main

import "fmt"

// 命名返回值:valid 是否合法,errMsg 错误信息
func checkRegisterInfo(phone string, age int) (valid bool, errMsg string) {
	// 1. 校验手机号长度
	if len(phone) != 11 {
		valid = false
		errMsg = "手机号必须为11位数字"
		return
	}

	// 2. 校验年龄范围
	if age < 16 || age > 60 {
		valid = false
		errMsg = "年龄必须在16~60岁之间"
		return
	}

	// 3. 全部通过
	valid = true
	errMsg = ""
	return
}

func main() {
	// 定义变量接收用户输入
	var phone string
	var age int

	// 输入手机号
	fmt.Print("请输入手机号:")
	fmt.Scan(&phone)

	// 输入年龄
	fmt.Print("请输入年龄:")
	fmt.Scan(&age)

	// 调用命名返回值函数
	valid, msg := checkRegisterInfo(phone, age)

	// 输出结果

	if valid {
		fmt.Println("校验通过:可以注册!")
	} else {
		fmt.Println("校验失败:", msg)
	}
}

解析时间字符串

题目描述

编写多返回值函数

parseDate(dateStr string) (year string, month string, day string, ok bool)

要求:

  1. 传入格式为 2026-03-31 的时间字符串
  2. 用切片截取 / 分割,拆分出 年、月、日
  3. 第四个返回值 ok:格式正确返回 true,否则 false
  4. 主函数输入时间,调用函数并输出年月日

输出示例

请输入日期:2026-04-01

年份: 2026

月份: 04

日期: 01

实现代码

Go 复制代码
package main

import (
	"fmt"
	"strings"
)

// parseDate 解析日期字符串,多返回:年、月、日、是否成功
func parseDate(dateStr string) (year string, month string, day string, ok bool) {
	// 按 "-" 分割字符串
	parts := strings.Split(dateStr, "-")

	// 判断是不是标准三段式:年-月-日
	if len(parts) != 3 {
		ok = false
		return
	}

	year = parts[0]
	month = parts[1]
	day = parts[2]
	ok = true
	return
}

func main() {
	var timeStr string
	fmt.Print("请输入日期:")
	fmt.Scanln(&timeStr)

	y, m, d, success := parseDate(timeStr)

	if success {
		fmt.Println("年份:", y)
		fmt.Println("月份:", m)
		fmt.Println("日期:", d)
	} else {
		fmt.Println("日期格式错误,请按 年-月-日 输入")
	}
}
相关推荐
echome8884 小时前
Go 语言并发编程:Goroutine 与 Channel 实战指南
后端·golang
风向决定发型丶4 小时前
Java 线程池 vs Go GMP
java·开发语言·golang
伐尘6 小时前
【图形学】CS:GO 的 “Uber 着色器” 是啥?
开发语言·golang·着色器
FJW0208146 小时前
什么是Go语言?云原生为什么要学Go?
开发语言·云原生·golang
人间打气筒(Ada)6 小时前
「码动四季·开源同行」golang:负载均衡如何提高系统可用性?
算法·golang·开源·go·负载均衡·负载均衡算法
糖炒栗子032618 小时前
Go 语言环境搭建与版本管理指南 (2026)
开发语言·后端·golang
今天也要学习吖19 小时前
开源AI智能客服系统AI-CS
人工智能·ui·chatgpt·golang·开源·gemini·智能客服系统
zihao_tom21 小时前
Go环境搭建(vscode调试)
开发语言·vscode·golang
F1FJJ1 天前
AI 编程实战对比:Claude Code vs Trae
图像处理·人工智能·ai作画·golang·visual studio code