Go基础及语法(五)

包的导入

同一文件夹

test
├── main.go
└── p
    └── p.go

p.go

package p // 包的定义(跟文件夹同名)

import "fmt" //单行导入包

func init() {
	fmt.Println("包里的init") //一个go文本只能有一个init()函数,不能接受参数也不能返回参数,导入时立刻执行
}

//编写包的函数
func Test() {
	fmt.Println("包的导入")
}

main.go

package main

//多行导入包
import (
	"./p"
	io "fmt" //起别名
)

func main() {
	p.Test() //执行导入的包的函数
	io.Println("test")
}

不在同一文件夹

test
└── p
    └── p.go
test1
├── main.go

main.go

package main

import (
	"../test/p"
	"fmt"
)

func init() {
	fmt.Println("main的init")
}

func main() {
	fmt.Println("HI")
	p.Test()
}
/*
包里的init
main的init
HI
包的导入
 */
 

interface接口

package main

import "fmt"

//定义接口
type in interface {
	math(int) int //接收类型和返回类型,没有为空
}

type add struct {
	a int
	b int
}

type sub struct {
	a int
	b int
}

func (a add) math(b int) int {
	return a.a + a.b + b
}

func (s sub) math(b int) int {
	return s.a - s.b - b
}

//接口调用对应方法
func m(i in, c int) int {
	return i.math(c)
}

func main() {
	a := add{1, 2}
	s := sub{1, 2}
	fmt.Println(a.math(3)) //6
	fmt.Println(s.math(3)) //-4
	fmt.Println(m(a, 4)) //7
	fmt.Println(m(s, 4)) //-5
}

空接口

空接口变量可以存放各种类型

package main

import "fmt"

func main() {
	var m map[interface{}]interface{}     //声明空接口变量
	m = make(map[interface{}]interface{}) //分配内存
	m["a"] = 1
	m[2] = "b"
	fmt.Println(m) //map[2:b a:1]
	for k, v := range m {
		fmt.Printf("%v,%v,%T, %T\n", k, v, k, v)
		/*
			a,1,string, int
			2,b,int, string
		*/
	}
}

类型断言

package main

import "fmt"

func main() {
	var m, k, v interface{}
	m = 100
	k, v = m.(string)
	fmt.Println(k, v) // false
	k, v = m.(int)
	fmt.Println(k, v) //100 true
	k, v = m.(uint8)
	fmt.Println(k, v) //0 false
}

文件操作

package main

import (
	"fmt"
	"io"
	"os"
)

func main() {
	file, err := os.Open("./main.go") //打开路径文件,"."为环境变量目录
	defer file.Close()                //函数结束关闭文件
	fmt.Println(file)                 //内存地址
	fmt.Println(err)                  //<nil>
	var content []byte
	var tmp = make([]byte, 128)
	for {
		n, err := file.Read(tmp) //读取文件内容,n为长度,err不报错时为nil或EOF
		fmt.Println(n, err)
		if err == io.EOF {
			break
		}
		content = append(content, tmp[:n]...) //...为解构,拼接文本
	}
	fmt.Println(string(content))
}

bufio模块

文件处理模块

package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
)

func main() {
	file, err := os.Open("./main.go") //打开路径文件,"."为环境变量目录
	if err == nil {
		defer file.Close()
		reader := bufio.NewReader(file)
		for{
			line, err := reader.ReadString('\n') //分行读取
			fmt.Println(line)
			fmt.Println(err)
			if err == io.EOF{
				break
			}
		}

	}
}

ioutil模块

读取整个文件

package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
	file, err := ioutil.ReadFile("./main.go") //打开路径文件,"."为环境变量目录
	if err == nil{
		fmt.Println(string(file))
	}
}

posted @ 2021-02-26 13:48  _Biko  阅读(61)  评论(0编辑  收藏  举报