- 博客(457)
- 收藏
- 关注
原创 1.HTTP概述
web浏览器、服务器和相关的web应用程序都是通过HTTP相互通信的HTTP是现代全球因特网中使用的公共语言1.HTTP——因特网的多媒体信使每天我们日常生活中使用的图片、页面、文本文件、小程序等都是通过HTTP从web服务器搬移到web浏览器的HTTP使用的是可靠的数据传输协议2.HTTP是如何传输web流量的(web客户端和服务器)web内容都是存储在web服务器上的,web服务器...
2019-11-28 18:23:03 997
原创 go install命令的使用
执行go install命令会自动生成bin目录和pkg目录src:放源代码bin:放可执行程序pkg:放平台相关的库如果有多个文件或多个包:(1)配置GOPATH环境变量,配置src同级目录的绝对路径(2)自动生成bin或pkg目录,需要使用go install命令(了解即可)除了要配置GOPATH环境变量,还要配置GOBIN环境变量...
2019-11-26 20:26:15 1309
原创 init函数介绍
导入一个包,先执行包里面的init函数,然后才开始执行main函数如果程序里面就有init函数,也会在main函数之前执行的package mainimport “fmt”func init ( ) {fmt.Println(“this is calc init”)}func main ( ) {}...
2019-11-26 20:08:41 8372
原创 工程管理:不同目录
(1)不同目录,包名不一样(2)调用不同包里面的函数,格式:包名.函数名( )(3)调用别的包的函数,这个包函数名字如果是小写,无法让别人使用,要想让别人使用,必须首字母大写在src目录下的main.go文件package mainimport {“fmt”“calc”}func main ( ) {a := calc.add(10,20)fmt.Println("a =...
2019-11-26 20:03:03 319
原创 工程管理:同级目录
1.main函数和init函数go里面有两个保留的函数,init函数(能够应用于所有的package)和main函数(只能应用与package main)这两个函数在定义的时候不能有任何的参数和返回值虽然一个package里面可以写任意多个init函数,建议一个package中每个文件只写一个init函数go程序会自动调用init()和main(),所以我们不需要在任何地方调用这两个函数,...
2019-11-25 19:55:38 503
原创 导入包的使用
1.什么是包?所有go语言的程序都会组织成若干组文件,每组文件被称为一个包这样每个包的代码都可以作为很小的复用单元,被其它项目引用一个包的源代码保存在一个或多个以.go文件后缀名的源文件中通常一个包所在目录路径的后缀是包的导入路径2.自定义包对于一个较大的应用程序,我们应该将它的功能性分隔成逻辑的单元,分别在不同的包里面实现我们创建的自定义包最好放在GOPATH中的src目录下(或者...
2019-11-25 19:34:32 430
原创 工作区介绍
封装函数的目的是重复利用当需求越来越多的时候,需要学会工程管理1.什么是工作区?go代码必须放在工作区当中,工作区其实就是一个对应于特定工程的目录,它应包含三个子目录:src目录、pkg目录、bin目录如果不在工作区当中,import导入包的时候就会失败src目录用于以代码包的形式组织并保存go源码文件pkg目录用于存放经由go install命令构建安装后的代码包...
2019-11-25 19:05:02 587
原创 不同作用域的同名变量
package mainimport “fmt”var a byte //全局变量func main ( ) {//var a int //局部变量//1.不同作用域允许定义同名变量//2.使用变量的原则,就进原则fmt.Printf("%T\n",a) //int{var a float32fmt.Printf(“2:%T\n”,a) //float32}test ()...
2019-11-25 18:45:02 2000
原创 全局变量
package mainimport “fmt”func test ( ) {fmt.Println("test:a = ",a)}//定义在函数外部的变量就是全局变量//全局变量在任何地方都能使用var a intfunc main ( ) {a = 10fmt.Println("a = ",a)}...
2019-11-25 18:39:05 223
原创 局部变量的特点
package mainimport “fmt”func test ( ) {a := 10fmt.Println ("a = ",a)}func main ( ) {//定义在{}里的变量就是局部变量,只能在{}里面有效//执行到定义变量那句话,才开始分配空间,离开作用域自动释放//作用域:变量起作用的范围//a = 666//错误,不能在这里赋值{i := 10fmt...
2019-11-25 18:35:05 1135
原创 获取命令行参数
package mainimport “fmt”import “os”func main ( ) {//接收用户传递的参数,都是以字符串方式传递的list := os.Argsn := len(list)fmt.Println("n = ",n)//xxx.exe a bfor i:= 0; i < n; i++ {fmt.Printf(“list[%d] = %s\n”...
2019-11-25 18:24:55 288
原创 defer和匿名函数结合使用
package mainimport “fmt”func main( ) {a := 10b := 20//后执行defer func (a,b int ) {fmt.Printf(“a = %d,b = %d\n”,a,b)} ( a,b) //()代表匿名函数,把参数传递过去,已经先传递参数,只是没有调用,直接是10和20//先执行a = 111b = 222fmt.P...
2019-11-25 18:14:38 304
原创 多个defer的执行顺序
package mainimport “fmt”func test (x int) {result := 100/xfmt.Println("result = ",result)}func main( ) {defer fmt.Println(“kkk”)defer fmt.Println(“yyy”)//调用一个函数,导致内存出问题test (0) //即使延迟函数出现...
2019-11-25 18:06:53 707
原创 延迟调用defer的使用
关键字defer用于延迟一个函数或者方法(或者当前所创建的匿名函数)的执行注意:defer语句只能出现在函数或者方法的内部defer语句经常用于处理成对的操作,例如:打开、关闭、连接、断开连接、加锁、释放锁通过defer机制,不论函数逻辑多复杂,都能保证在任何执行路径下,资源被释放释放资源的defer应该直接跟在请求资源的语句后多个defer的执行顺序:如果一个函数中有多个defer语句...
2019-11-25 17:13:29 243
原创 闭包的特点
闭包就是一个函数“捕获”了和它在同一个作用域的其它常量和变量当闭包被调用的时候,不管在程序什么地方调用,闭包能够使用这些常量或者变量它不关心这些捕获了的变量和常量是否已经超出了作用域,只有闭包还在使用它,这些变量就是存在的在go语言中,所有的匿名函数(函数字面量)都是闭包,匿名函数指的是不需要定义函数名的一种函数实现方式...
2019-11-23 21:33:09 605
原创 闭包捕获外部变量的特点
package mainimport “fmt”func main ( ) {a := 10str := “mike”func ( ) {//闭包引用方式,捕获外部变量a = 666str = “go”fmt.Printf(“内部:a = %d,str = %s\n”,a,str)} ( ) //()代表直接调用fmt.Printf(“外部:a = %d,str = %s\n...
2019-11-23 21:22:07 347
原创 回调函数(多态应用)
package mainimport “fmt”type FuncType func (int,int) int//实现加法func Add(a,b int) int {return a + b}//实现减法func Minus(a,b int) int {return a - b}//实现乘法func Mul(a,b int) int {return a*b}//回...
2019-11-23 21:10:58 541
原创 函数类型(c语言中函数指针)
在Go语言中,函数也是一种数据类型,我们可以通过type来定义它它的类型就是所有拥有相同的参数,相同的返回值的一种类型package mainimport “fmt”func Add(a,b int) int {return a+ b}func minus (a,b int) int {return a - b}//函数也是一种数据类型,通过type给一个函数类型起名//F...
2019-11-23 20:50:53 664
原创 通过递归实现的累加
递归函数指的是函数可以直接或间接的调用自身递归函数通常有相同的结构:一个跳出条件和一个递归体跳出条件就是根据传入的参数判断是否需要停止递归递归体就是函数自身所作的一些处理package mainimport “fmt”//实现1+2+3+…+100func test01( ) (sum int){for i:=1;i<=100;i++{sum += i}return}...
2019-11-23 20:18:56 654
原创 递归函数的调用流程
普通函数的调用流程:先调用,后返回,先进后出递归函数的调用流程:函数调用自己本身,利用此特点package mainimport “fmt”func test (a int) {if a ==1 {//函数终止调用的条件,非常重要fmt.Println("a = ",a)return//终止函数调用}//函数调用自身test(a-1)fmt.Println("a = ",a)...
2019-11-23 19:56:52 962
原创 普通函数的调用流程
package mainimport “fmt”func funcc (c int) {fmt.Println("c = ",c)}func funcb (b int) {funcc(b-1)fmt.Println("b = ",b)}func funca(a int) {funcb(a-1)fmt.Println('a = ",a)}func main ( ) {...
2019-11-23 19:42:28 318
原创 有参有返回值函数的使用
package main //必须有一个mian包import “fmt” //使用什么函数就要导入相应的包//求最大值和最小值的函数的定义func MacAndMin (a,b int) (max,min int) {if a > b {max = amin = b} else {max = bmin = a}return //有返回值的函数,必须通过return返回...
2019-11-23 19:23:59 3038
原创 函数有多个返回值
package mainimport “fmt”//无参多个返回值的函数func myfunc01( ) (int,int,int) {return 1,2,3}//go官方推荐方法func myfunc02( ) (a int,b int,c int) {a,b,c = 111,222,333return}func myfunc03( ) (a,b,c int) {a,...
2019-11-23 19:08:47 1646
原创 函数只有一个返回值(无参)
package mainimport “fmt”//无参有返回值:只有一个返回值//有返回值的函数需要通过return中断函数,通过return返回func myfunc01( ) int {return 111}//给返回值起一个变量名,go语言推荐写法func myfunc02( ) (result int ) {return 222 }//这种最常用func my...
2019-11-23 18:59:02 1369
原创 有参无返回值函数使用的总结
(1)有参无返回值函数的调用func xxx(a,b int ) {}xxx(111,222)//注意:调用的时候参数的个数(2)不定参数调用的多种方法func xxx(a …int) {}xxx( )xxx(1)xxx(1,2,3)...
2019-11-23 18:47:01 2515
原创 不定参数的传递
把程序类比于商场(1)入口:go语言有且只有一个入口函数main(2)干活,调用函数//(1)go语言以包作为管理单位//(2)每个文件必须先声明包//(3)程序必须有一个main包(很重要)package mainimport “fmt”//导入相应的包,函数才可以使用//入口函数func main ( ) { //左括号必须和函数名通行,不能换行//打印//"hello...
2019-11-23 18:43:10 261
原创 不定参数类型(参数个数是不确定的)
不定参数是指函数传入的参数的个数是不确定数量package mainimport “fmt”func MyFunc01 (a int,b int) { //函数的参数是固定的}//…int类型这样的类型,…type不定参数类型//注意:不定参数,一定只能放在形参中的最后一个参数func MyFunc02 (args …int) { //传递的实参可以是0个或多个fmt.Printl...
2019-11-22 11:00:25 1553
原创 有参无返回值函数:普通参数列表
package main //必须import “fmt”//有参无返回值函数的定义,普通参数列表//定义函数时,在函数名后面()定义的参数叫形参//参数传递,只能由实参传递给形参,不能反过来,单向传递func MyFunc01 ( a int) {//a = 111fmt.Println("a = ",a)}func MyFunc02(a int,b int) {fmt.P...
2019-11-22 10:28:23 892
原创 函数:无参无返回值函数的使用
1.定义格式函数构成代码执行的逻辑结构,在go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句go语言中函数定义的格式如下:func FuncName(/参数列表/) (01 type1,02 type2/返回类型/) {//函数体return v1,v2 //返回多个值}函数定义说明:func函数由关键字func开始声明...
2019-11-22 09:41:28 9432
原创 goto的使用(无条件跳转)
用goto跳转到必须在当前函数内定义的标签package mainimport “fmt”func main ( ) {//break //break is not in a loop,switch,or select//continue //continue is not in a loop//goto可以用在任何地方,但是不能跨函数使用fmt.Pri...
2019-11-22 09:23:14 1449
原创 跳转语句break和continue的区别
在循环里面有两个关键操作break和continuebreak的操作是跳出当前循环continue是跳过本次循环注意:break可以用于for、switch、select,而continue只能用于for循环package main //必须有一个main包import “fmt”import “time”func main ( ) {i := 0for {//for后面不写任何...
2019-11-22 09:12:58 2129
原创 range的使用(迭代)
关键字range会返回两个值,第一个返回值是元素的数组下标,第二个返回值是元素的值package main //必须有一个main包import “fmt”func main ( ) {str := ‘abc’ //定义一个字符串//通过for循环打印字符串中的通每个字符for i := 0; i < len(str);i++ {fmt.Printf(“str[%d]=%c\...
2019-11-22 09:00:34 1304
原创 for循环的使用
package main //必须有一个main包import “fmt”func main ( ) {//for 初始化条件;判断条件;条件变化{//}//求1+2+3+…+100的累加和sum := 0//(1)初始化条件 i=1//(2)判断条件是否为真,i<100,如果为真,执行循环体,如果为假,跳出循环//(3)条件变化 i++//(4)重复2,3for...
2019-11-21 21:26:08 153
原创 switch使用的补充
package main //必须有一个main包import “fmt”func main ( ) {//支持一个初始化语句,初始化语句和条件本身,以分号分隔switch num := 1;num { //switch后面写的是变量本身case1:fmt.Println(“按下的是1楼”)case2:fmt.Println(“按下的是2楼”) case3:fmt.Pri...
2019-11-21 21:15:53 150
原创 switch的使用
go语言里面switch默认相当于每个case最后带有break匹配成功后不会自动向下执行其它case,而是跳出整个switch但是可以使用fallthrough强制执行后面的case代码package main //必须有一个main包import “fmt”func main ( ) {//num := 1var num intfmt.Printf("请按下楼层: ")f...
2019-11-21 21:00:09 280
原创 if_elseif_else的使用(多个分支,效率更高)
package main //必须有一个main包import “fmt”func main ( ) {//1a := 10if a ==10 {fmt.Println(“a == 10”)} else { //else后面没有条件fmt.Println(“a != 10”)}//2if a := 10;a == 10 {fmt.Println(“a == 10”)...
2019-11-21 20:38:57 1477
原创 选择结构:if的使用以及if支持初始化语句
流程控制Go语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构顺序结构:程序按顺序执行,不发生跳转选择结构:依据是否满足条件,有选择的执行相应功能循环结构:依据条件是否满足,循环多次执行某段代码package main //必须有一个main包import “fmt”func main ( ) {a := “haha”// if和{就是条件,条件通常都是关系运算符...
2019-11-21 20:27:44 377
原创 运算符(下篇)
1.赋值运算符运算符说明=普通赋值+=相加后再赋值-=相减后再赋值*=相乘后再赋值/=相除后再赋值%=取余后再赋值<<=左移后赋值>>=右移后赋值&=按位与后赋值^=按位异或后赋值哈=按位或后赋值2.其它运算符运算符术语示例说明&a...
2019-11-21 19:21:14 202
原创 运算符(上篇)
1.算术运算符运算符术语示例结果+加10+515-减10-55*乘10*550/除10/52%取模(取余)10%31++后自增,没有前自增a=0;a++;a=a+1a=1–后自减,没有前自减a=2;a–;a=a-1a=12.关系运算符(主要是判断真假)运算符术语示
2019-11-21 18:59:44 153
原创 类型别名(非常重要)
实际就是给一个名字起一个别名而已package main //必须有一个main包import “fmt”func main ( ) {//给int64起一个别名叫做biginttype bigint int64var bigint a //等价于var int64 afmt.Printf(“a type is %T\n”,a)type (long int64cha...
2019-11-21 15:44:05 317
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人