一定要看报的是什么错误,还要翻译,节约时间成本。。。
1.输出结果
语法刚学,哈哈
2.在model中使用工厂模式,返回一个Customer的实例
正确方式
错误使用方式,不要急着用指针
错误使用方式,最终会出现两个问题
1.
不能将customer(*model.customer类型的变量)用作要追加的参数中的model.Custom值(退出状态1)
根据提示应该是类型不同导致,
结构体
customer := model.NewCustomer2(name, gender, age, phone, email)
指针类型func NewCustomer(id int, name string, gender string, age int, phone string, email string) *Customer { return &Customer{
把 Customer { return &Customer{ 去掉 &即可
2.报Add()没有声明,仔细找了很久最后把工厂模式的* &删了就行了 当然了这里也有可能是导入包的地址不对导致的,所以import也得检查
这里的list()还能用,是因为代码没问题,导入是正常的,但是Add()之前就显示导入失败,把* &删了才行,但是也有可能是将类型纠正过了就好了,(案例不重复出现)
service
view
3.换行字符问题(独立思考解决)
统计一个文件中含有的英文、数字、空格及其它字符数量
最后发现其他字符数量有问题,分析是换行字符的问题就加以补充
所有代码
package main
//统计一个文件中含有的英文、数字、空格及其它字符数量
import (
"bufio"
"fmt"
"io"
"log"
"os"
)
// 定义一个结构体,用于保存统计结果
type CharCount struct {
EnglishCount int //
NumCount int
SpaceCount int
OtherCount int // 记录其它字符的个数
rnCount int //换行的个数
}
func main() {
//思路: 打开一个文件, 创一个 Reader
//每读取一行,就去统计该行有多少个 英文、数字、空格和其他字符
//然后将结果保存到一个结构体
fileName := "D:/goprojectNeeds/abc.txt"
file, err := os.Open(fileName)
if err != nil {
log.Fatal(err)
// return 默认Fatal是设置了return了,看下面代码解释
}
defer file.Close()
//定义个 CharCount 实例
var count CharCount
//创建一个 Reader
reader := bufio.NewReader(file)
//开始循环的读取file的内容
for {
str, err := reader.ReadString('\n') //注意是单引号,关键 读到一个换行就结束
//Fatal相当于Print()后面跟着对os.Exit(1)的调用。
//1应该意思是只能输出一条语句,即错误语句,
//系统认为你有错误,就return了,下面的输出字符个数就不再执行
//最终只输出2023/07/06 17:04:56 EOF
//把下面注释之后就
// if err != nil {
// log.Fatal(err)
// }
if err == io.EOF { //读到文件末尾就退出
break
}
//为了兼容中文字符, 可以将 str 转成 []rune
//遍历 str ,进行统计
for _, v := range str {
switch {
case v >= 'a' && v <= 'z':
fallthrough //穿透
case v >= 'A' && v <= 'Z':
count.EnglishCount++
//空格和tab的个数都算空格个数
case v == ' ' || v == '\t':
count.SpaceCount++
case v >= '0' && v <= '9':
count.NumCount++
//关键 可能是版本问题,老师的不太对了
//根据老师所讲有些系统里面 \r\n也表示换行
//所以把这个也列出来就不会影响到count.OtherCount
//一个换行 \r \n 代表字符的个数为4,两个就为8嘛
//不写下面这段就统计到count.OtherCount了
case v == '\n' || v == '\r':
count.rnCount++
default:
count.OtherCount++
}
}
}
//123 hello(换行了为8)
//tab牛逼
//英语字符的个数为=5 数字的个数为=3 空格的个数为=2 其它字符个数=2 换行字符的个数=8
//输出统计的结果看看是否正确
fmt.Printf("英语字符的个数为=%v 数字的个数为=%v 空格的个数为=%v 其它字符个数=%v,换行字符的个数=%v",
count.EnglishCount, count.NumCount, count.SpaceCount, count.OtherCount, count.rnCount)
}