语法问题

135 阅读3分钟

一定要看报的是什么错误,还要翻译,节约时间成本。。。

1.输出结果

语法刚学,哈哈 image.png

2.在model中使用工厂模式,返回一个Customer的实例

正确方式 image.png 错误使用方式,不要急着用指针 image.png

错误使用方式,最终会出现两个问题 1. image.png

image.png 不能将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{ 去掉 &即可

image.png

image.png

image.png

image.png

2.报Add()没有声明,仔细找了很久最后把工厂模式的* &删了就行了 当然了这里也有可能是导入包的地址不对导致的,所以import也得检查

这里的list()还能用,是因为代码没问题,导入是正常的,但是Add()之前就显示导入失败,把* &删了才行,但是也有可能是将类型纠正过了就好了,(案例不重复出现) service image.png view image.png

3.换行字符问题(独立思考解决)

统计一个文件中含有的英文、数字、空格及其它字符数量

最后发现其他字符数量有问题,分析是换行字符的问题就加以补充 image.png

所有代码

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)
}