Go从0开发(6)_接口/文件操作

 接口 interface 

package main

import "fmt"

//动物
type dongwu interface {
wangwang()
}

//狗
type dog struct {
name string
}

func (d dog) wangwang() {
fmt.Println(d.name,"会 汪汪汪")
}

//猴子
type monkey struct {
name string
}

func (d monkey) wangwang() {
fmt.Println(d.name,"会 爬树")
}

func da(d dongwu) {
d.wangwang()
}

func main() {
d := dog{name:"狼狗"}
da(d)

b := monkey{name:"大嘴猴"}
da(b)
}


接口嵌套/一个结构体多个接口(接口里的方法体继承就需要实现)

package main

import "fmt"

//接口嵌套
type Monkey interface {
dongwu
lingzhang
}

//动物
type dongwu interface {
wangwang()
}

//灵长动物
type lingzhang interface {
sikao()
}

//狗
type dog struct {
name string
}

func (d dog) wangwang() {
fmt.Println(d.name,"会 汪汪汪")
}

func (d dog) sikao() {
fmt.Println(d.name,"会 思考")
}

//猴子
type monkey struct {
name string
}

func (d monkey) wangwang() {
fmt.Println(d.name,"会 爬树")
}

func (d monkey) sikao() {
fmt.Println(d.name,"会 思考")
}

func da(d Monkey) {
d.wangwang()
}
func sk(d Monkey) {
d.sikao()
}

func main() {
dd := dog{name:"狼狗"}
da(dd)

b := monkey{name: "大嘴猴"}
da(b)
sk(b)
}

空接口/作为参数


func test1(a interface{}) {
fmt.Printf("%T %#v \n",a,a)
}

func main() {

//空接口
var m1 map[string]interface{}
m1 = make(map[string]interface{})
m1["name"] = "张三"
m1["age"] = 16
m1["money"] = 12.56
m1["is_boy"] = true
m1["生日"] = time.Now().Unix()
fmt.Printf("%T %#v \n",m1,m1)

//作为参数
test1(456.22)

}

类型断言

//判断类型是啥
func istype1(t interface{}) {
fmt.Printf("%T \n",t)
switch t.(type) {
case int:
fmt.Println("int 类型")
case string:
fmt.Println("string 类型")
case byte:
fmt.Println("byte 类型")
case map[int]interface{}:
fmt.Println("map[int]interface{} 类型")
case bool:
fmt.Println("bool 类型")
case float64:
fmt.Println("float64 类型")
case int32:
fmt.Println("float64 类型")
}
}

func istype2(t interface{}) {
fmt.Printf("%T \n",t)
if str,ok:=t.(int);ok == false{
fmt.Println("非int类型")
}else{
fmt.Println("int类型;值为: ",str)
}
}

func main() {
istype1(123)
istype1('1')
istype1(false)
istype2(false)
istype2(456)
}

文件OS 读
import (
"bufio"
"fmt"
"io"
"io/ioutil"
"os"
)

func du1() {
fileinfo,err := os.Open(`E:\Go\src\DarkHorse\studygo\day05\1.log`)
defer fileinfo.Close()
if err != nil{
fmt.Println("打开文件出错",err)
return
}
var info [10]byte
//infos := make([]byte,188)
for {
n,err:=fileinfo.Read(info[:])
if err != io.EOF{
fmt.Println("读完了",err)
return
}
if err != nil{
fmt.Println("读取文件出错",err)
return
}
fmt.Println(n)
fmt.Println(len(info))
fmt.Println(string(info[:n]))
if n < 10{
return
}
}
}

//利用 bufio
func du2() {
fileobj,err:=os.Open(`E:\Go\src\DarkHorse\studygo\day05\1.log`)
if err != nil{
fmt.Println("文件打开失败")
}
defer fileobj.Close()

reader := bufio.NewReader(fileobj)
for {
line,err := reader.ReadString('\n')
fmt.Println(line)
if err == io.EOF{
fmt.Println("读完了啊")
return
}
if err != nil{
fmt.Println("伙计报错了",err)
return
}

}



}

//读全部
func du3() {
ret,err := ioutil.ReadFile(`E:\Go\src\DarkHorse\studygo\day05\1.log`)
if err != nil{
fmt.Println("文件打开失败")
}
fmt.Print(string(ret))
}

func main() {
du3()
}

文件OS 写

func xie1()  {
fileinfo,err := os.OpenFile(`E:\Go\src\DarkHorse\studygo\day05\2.log`,os.O_WRONLY|os.O_CREATE,0664)
if err != nil{
fmt.Println("文件打开失败",err)
}
defer fileinfo.Close()

fileinfo.Write([]byte("今天天气很好啊 \n"))
fileinfo.WriteString("你说的对 ")
}

//缓存写
func xie2() {
fileinfo,err := os.OpenFile(`E:\Go\src\DarkHorse\studygo\day05\3.log`,os.O_WRONLY|os.O_CREATE,0664)
if err != nil{
fmt.Println("文件打开失败",err)
}
defer fileinfo.Close()

//整个缓存
wr := bufio.NewWriter(fileinfo)
wr.WriteString("12331231")

wr.Flush() //最后写入文件


}

//直接全部写
func xie3() {
str := "阿斯蒂芬的共和国肺结核挂科就好"
err := ioutil.WriteFile(`E:\Go\src\DarkHorse\studygo\day05\4.log`,[]byte(str),0666)
if err != nil{
fmt.Print("出错了")
return
}


}

func main() {
xie3()
}



伍先生
  • 职业: 程序员,产品
  • 码龄: 8.7
  • 技能: PHP Go 前端
  • 微信: JwCode
  • 公众号/小程序: 渐悟分享