zoukankan      html  css  js  c++  java
  • go的函数,包以及mode的补充

    1、函数

    /*
    函数
     */
    
    package main
    
    import "fmt"
    
    func main() {
    	//fmt.Println("开始")
    
    	//1  调用函数
    	//test()
    
    	//2  调用函数
    	//test1(10)
    
    	//3 调用函数
    	//test2(10, 11 )
    
    	//4 调用函数
    	//var a int
    	//a=test3(10,11)
    	//a:=test3(10,11)
    	//fmt.Println(a)
    
    	//5 调用函数(有几个返回值必须用几个参数来接)
    	//a,b:=test4(10,11)
    	//第二个参数不接受,但是和python中不一样是不可以打印出来的
    	//a,_:=test4(10,11)
    	//fmt.Println(a,b)
    
    	//6 可边长参数
    	//fmt.Println(1,2,3)
    	//test5(1,2,3,4)
    
    
    	//7 匿名函数(定义在函数内部,没有名字)
    	// 放在函数内部,有两种处理方案
    		//1让它执行
    		//2当参数返回
    	//否则报错
    	//func (){
    	//	fmt.Println("我是匿名函数")
    	//}()
    
    
    	//8 调用函数  类型是func类型
    	//var a func()
    	//a=test()
    	//a()
    
    	//a:=test()
    	//a()
    
    	//9 闭包调用
    	//a:=test(10)
    	//a()
    
    	//10 闭包函数高级
    	a:=test(99)
    	a(11,12)
    
    
    }
    //func关键字 函数名(参数1 类型, 参数2 类型){函数体内容}
    
    
    // 1  第一种无参数无返回值的普通函数
    //func test(){
    //	fmt.Println("我是test")
    //}
    
    // 2 带参数 无返回值
    // go 中全是位置参数,没有所谓的关键字参数以及默认参数
    //func test1(a int)  {
    //	fmt.Println(a)
    //}
    
    // 3 带多个参数 无返回值
    // 如果两个参数都是同一个类型可以简写
    //func test2(a ,b int)  {
    //	fmt.Println(a+b)
    //}
    
    // 4 带多个参数,有一个返回值(也得指明返回参数的类型)
    //表示返回值类型是int类型
    //func test3(a,b int) int  {
    //	c:=a+b
    //	return c
    //}
    
    // 5 带多个参数 有多个返回值(返回值类型,返回值类型)
    //func test4(a,b int) (int,int)  {
    //	c:=a+b
    //	d:=a*b
    //	return c,d
    //}
    
    
    //6 可变长参数
    //可以传任意类型的int类型
    //func test5(a ...int)  {
    //	//a是切片
    //	fmt.Println(a)
    //}
    
    //7 匿名函数(定义在函数内部,没有名字)
    
    //8 函数是一等公民(头等函数),函数也是一个类型
    //在一门语言中,如果函数可以赋值给变量 ,那函数就叫一等公民 或者叫头等函数
    //返回值是函数类型
    //func test() func() {
    //	var a func()= func() {
    //		fmt.Println("我是内层函数")
    //	}
    //	return a
    //}
    
    
    //9闭包函数(定义在函数内部,可以引用给外部变量)
    //闭包函数的作用:多了一种函数传参的方式
    //func test(b int) func() {
    //	//b:=10
    //	a:= func() {
    //		fmt.Println(b)
    //	}
    //	return a
    //}
    
    // go语言中没有装饰器语法糖
    
    //10 闭包函数高级
    func test(b int) func(x,y int) {
    	var a func(x,y int)
    	a= func(x,y int) {
    		fmt.Println(b+x+y)
    	}
    	return a
    }
    
    
    
    //规范
    /*
    	1 变量:go语言中变量区分大小写
    	2 文件名:建议使用下划线
    	3 大写字母开头 表示导出字段(外部包可以使用)
    	4 先导入第三方包 内置包 自己写的包
    	5 不像python中缩进代表同一段代码块
     */
    

    2、包

    //1 在同一个包下(文件夹下),包名必须一致
    //2 以后,包名就是文件夹的名字
    //3 同一个包下,同名函数只能有一个(init除外)
    //4 一个包(当成一个文件),同一包下的函数,直接调用即可
    //5 导包的位置,从src路径开始
    //6 包只要在src路径下就可以导入
    //7 大写表示导出,在外部包可以使用,小写只能再包内部适应
    //8 使用第三方包:go get github.com/astaxie/beego  (放到gopath的src路径下)
    	-python:pip3 install requests
        package main
        import "github.com/astaxie/beego"
    
        func main() {
          beego.Run()
        }
    
    

    3、mode模式的补充

    //1 包导入 import . "github.com/astaxie/beego"  类似于python中form xx import *
    //2 包导入 import _ "github.com/go-sql-driver/mysql"  触发init的执行,但是不试用包内的函数
    //3 包导入 import f "fmt"   重命名,以后直接用f
    
    //4 对比python中__init__.py  
    //在代码中导入模块
    import xx   实质上触发__init__.py  的执行(在__init__.py中也可以执行其他代码,对应到go中就是init函数)
    一般情况下,在__init__.py写from xx import 会使用到的函数,导过来
    以后再用 xx.函数()
    
    //5 go mod没有之前,可以设置多个gopath,开发某个项目,切到不同的gopath,类似于虚拟环境
    
    //6 go env
    	-GO111MODULE="off"  表示go mod模式是关闭的,用gopath
    	 export GO111MODULE=on   # 设置打开
    	-一旦开启了go mod模式,代码不需要放在src路径下(任意位置都可以)
    	-在项目路径下要有 go.mod 文件(文件里记录了,go版本,项目依赖的包,包的版本)
    	-写代码,建自己的包即可
    	-一般情况下,项目有一个main.go  内部是main包,main函数,整个程序的入口
    
  • 相关阅读:
    演讲的灵魂:主线
    四种演讲风格应该被摒弃
    思想是演讲的基础
    DML&DDL&DCL
    kafka在windows下安装单机版
    《可复制的领导力》-领导力技术
    《可复制的领导力》-管理者角色
    《可复制的领导力》-沟通视窗
    《可复制的领导力》-领导和管理的区别
    vs code设置终端主题颜色
  • 原文地址:https://www.cnblogs.com/yafeng666/p/12748443.html
Copyright © 2011-2022 走看看