Go 语言入门指南(6):基础语法和常用特性解析| 青训营

52 阅读1分钟

十八. GOTO语句

go语言有goto语句。Go语言的goto语句可以无条件地转移到过程中指定的行;goto语句通常与条件语句配合使用,可用来实现条件转移,跳出循环体等功能。

func main() {
	for i := 0; i < 10; i++ {
		for j := 0; j < 10; j++ {
			if j == 2 {
				// 设置退出标签
				goto breakTag
			}
		}
	}
	return
breakTag:
	fmt.Println("结束循环")
}

结构体的嵌套

在Go语言中,结构体可以嵌套在其他结构体中,从而形成更复杂的数据结构。嵌套结构体的定义方式与普通结构体的定义方式相同,只是在字段的类型中指定另一个结构体类型。

十九.接口

1 接口的概念

go语言将一些公共的处理逻辑模板集中在接口中

2 接口的案例
type Student struct{
	ownName  string
	ownAge  int
	ownAddress string
}
type People interface {
	age()
}
func (stu Student) age() {
	fmt.Println("stu.ownName")
}
func main() {
    //var stu1 Student
	//stu1 = Student{}
	//stu1.ownName = "jack"
	//stu1.ownAge = 23
	//stu1.ownAddress = "西安"
	//stu1.age()
	var peo People
	peo = new(Student)
	peo.age()
}

3 利用接口修改结构体中的属性
  • 类似于java中的set,get方法
type Student struct {
	name string
}
type people interface {
	getName()
	setName(name string)
}
func (stu Student) getName() {
	fmt.Println(stu.name)
}
func (stu *Student) setName(name string) {
	 stu.name = name
}
func main() {
   var stu Student = Student{"jack"}
   stu.getName()
   stu.setName("rise")
   stu.getName()
}

二十.方法

1方法的使用细节

方法名小写,只能在本包使用,方法名大写,可以在本包和其他包使用

2 函数和方法的区别

方法一般指的是与结构体绑定的方法,函数指的就是普通的函数。

二十一.文件的操作

1 流
  • 输入流
    数据从数据源(文件)到程序(内存)的路径
  • 输出流
    数据从程序(内存)到数据源(文件)的路径
2 打开关闭文件
func main(){
	file, err := os.Open("F:\\a.txt")
	if err != nil{
		fmt.Println("打开文件出错")
	}else {
		fmt.Printf("file=%v", file)
	}
	//关闭文件
	err1 :=file.Close()
	if err != nil{
		fmt.Println("关闭文件出错",err1)
	}
}


3.写入文件
func main(){
	filename := "f://a.txt"
	file, err := os.OpenFile(filename, os.O_WRONLY | os.O_CREATE, 0666 )
    if err != nil{
		fmt.Println("打开文件出错")
		return
	}
	defer file.Close()
	str := "hello, my daday"
	writer :=bufio.NewWriter(file)
	writer.WriteString(str)
	//write是写入缓存中的,flush是写入到文件中
	writer.Flush()
	fmt.Println("写入成功")
}

4.判断文件是否存在
func judgaFile(filePath string){
	_,err := os.Stat(filePath)
	if err == nil{
		fmt.Println("文件存在")
		return
	}
	if os.IsNotExist(err) {
		fmt.Println("文件不存在")
		return
	}
	fmt.Println("不确定文件存在不存在")

}
func main(){
	pathName := "f://a1.txt"
	judgaFile(pathName)
}