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