zoukankan      html  css  js  c++  java
  • 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
    ", 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('
    ') //分行读取
    			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))
    	}
    }
    
    
  • 相关阅读:
    leetcode 之Binary Tree Postorder Traversal
    关于java中this的一些总结
    Javascript的匿名函数与自执行
    js 闭包学习笔记
    滚动条到底自动加载数据
    AMD:异步模块定义
    Sass、LESS 和 Stylus
    【原创】Mysql设置自增长主键的初始值
    -webkit-animation的使用
    CSS滤镜
  • 原文地址:https://www.cnblogs.com/bgr1115/p/14421657.html
Copyright © 2011-2022 走看看