Go 从入门到精通(三)字符串,时间,流程控制,函数
2018-01-18 16:59
375 查看
一、strings和strconv的使用
stringsstrings.HasPrefix(s string,preffix string) bool:判断字符串s是否以prefix开头stirngs.HasSuffix(s string,suffix string) bool:
判断字符串s是否以suffix结尾strings.Index(s string,str string) int:
判断str在s中首次出现的位置,如果没有出现,则返回-1strings.LastIndex(s string,str string) int:
判断str在s中最后出现的位置,如果没有出现,则返回-1strings.Replace(str string,old string,new string,n int):
字符串替换strings.Count(str string,count int)string:
字符串计数strings.Repeat(str string,count int) string:
重复count次strstrings.ToLower(str string)
转换为小写strings.ToUpper(str string)string:
转换为大写strings.TrimSpace(str string):
去掉字符串首位空白字符strings.Trim(str string,cut string):
去掉字符串首尾cut字符strings.TrimLeft(str string,cut string):
去掉字符串首部cut字符strings.TrimRight(str string,cunt string):
去掉字符串尾部cut字符strings.Field(str string):
返回str空格分隔的所有子串的slicestring.Split(str string,split string):
返回str split分割的所有子串的slicestrings.Join(s1 []string,sep string):
用sep把s1中的所有元素连接起来strconvscronv.Itoa(i int):把一个整数转换成字符串scronv.Atio(str string)(int,errror):
把一个字符串转换成整数
二、Go中时间和日期类型
当前时间:now:= time.Now()time.Now().Day()time.Now().Minute()time.Now().Month()time.Now().Year()time.Duration用来表示纳秒一些常用的时间常量const (Nanosecond Duration = 1
Microsecond =1000 * Nanosecond
Millisecond =1000 * Microsecond
Second =1000 * Millisecond
Minute =60 * Second
Hour =60 * Minute
)格式化
package main import "fmt" func main() { var a int = 10 //通过&a打印a的指针地址 fmt.Println(&a) //定义一个指针类型的变量p var p *int //讲a的指针地址复制给p p = &a fmt.Println(*p) //给指针p赋值 *p = 100 fmt.Println(a) }
三、指针类型
普通的类型,变量存的就是值,也叫值类型获取变量的地址,用&,
指针类型,变量存的是一个地址,这个地址存的才是真正的值
获取指针类型所指向的值,用*,例如:var *p int, 使用 *p获取p指向值通过下面的代码例子理解:
package main import "fmt" func main() { var a int = 10 fmt.Println(&a) var p *int p = &a fmt.Println(*p) *p = 100 fmt.Println(a) }
四、流程控制
if else 分支判断常见格式类型如下:if 条件{
}if 条件{
}else{
}if 条件{
}else if 条件{
}else{
}switch case语法格式:
switch var { case var1: case var2: case var3: default: }
如果满足了var1 想要穿透下一个需要添加fallthrough例子如下:
package main import "fmt" func main() { var a int = 0 switch a { case 0: fmt.Println("a 等于0") fallthrough case 1: fmt.Println("a等于1") default: fmt.Println("a等于默认值") } }
如果我们没有添加fallthrough只会打印a等于0,但是现在回把case1中的打印内容也打印出来同样这里我们需要知道case 后面是可以写条件的for语句语法
for 初始化变量;条件判断;变量修改{
}一个简单的例子
for i:=0;i<100;i++{ fmt.Println(i) }for循环的其他几种常见写法for 条件 {
}死循环的写法
for {
}for range语句通过一个例子理解:
str := "hello 世界" for i,v := range str{ fmt.Printf("index[%d] val[%c] len[%d]\n",i,v,len([]byte(string(v)))) }这里需要注意的一个问题是,range str返回的是两个值,一个是字符串的下标,一个是字符串中单个的字符goto 和label语句
package main import "fmt" func main() { LABEL1:for i:=0;i<5;i++{ for j:=0;j<5;j++{ if j == 4{ continue LABEL1 } fmt.Printf("i is :%d and j is:%d\n",i,j) } } }
代码中我们在continue 后面添加了一个LABEL1这样当循环匹配到j等于4的时候,就会跳出循环,重新回到最外成i的循环,而如果没有LABEL1则就会跳出j的本次循环,执行j++进入到j的下次循环我们接着看goto的用法,但是代码中我们不建议使用goto
package main import "fmt" func main() { i :=0 HEAR: fmt.Println(i) i++ if i == 5{ return } goto HEAR }
break 和continue
一句话解释:break是终止整个循环,continue是终止此次循环
五、函数详解
声明语法func 函数名 (参数列表) [(返回列表)]{}一些常见的写法例子func add(){}func add(a int,b int){
}func add(a int,b int) int {}func add(a int,b int) (int,int) {}func add(a,b int)(int,int){}go函数的特点不支持重载,一个包不能包含连个名字一样的函数
函数是一等公民,函数也是一种类型,一个函数可以赋值给变量
匿名函数
多返回值
其他几个概念可能都好理解,我们这里主要说说第二条,函数也是一种类型,一个函数可以赋值给变量通过下面的例子演示
package main import "fmt" type add_func func(int,int) int func add(a,b int) int { return a+b } func operator(op add_func,a int,b int) int { return op(a,b) } func main() { c := add fmt.Println(c) sum := operator(c,100,200) fmt.Println(sum) }
这里通过type自定义了一个add_func类型函数参数传递方式这里主要有两种方式:值传递,引用传递无论是值传递还是引用传递,传递给函数的都是变量的副本,不过值传递的是值的拷贝,引用传递传递的是地址的拷贝,一般来说,地址拷贝更为高效,而值拷贝取决于拷贝的对象的大小,对象越大,则性能越低命名返回值的名字通过下面的例子理解:
func add_sum(a,b int)(c int){ c = a + b return }下划线标识符,用来忽略返回值可变参数表示0个或多个参数
fucn add(arg...int) int{
}表示1个或多个参数
func add(a int,arg...int) int {
}
其中arg是一个slice,我们可以通过arg[index]获取参数
通过len(arg)可以判断参数的个数defer用途当函数返回时,执行defer语句,因此,可以用来做资源清理
多个defer语句,按先进后厨的方式执行
defer语句中变量,在defer声明时就决定了
通过下面的例子理解:
package main import "fmt" func main() { a:=0 defer fmt.Println("defer---->",a) a++ fmt.Println(a) }
结果会在最后打印defer---->0 ,这里就体现了defer语句中变量,在defer声明时就决定了
原文地址: http://www.cnblogs.com/zhaof/p/7072122.html
相关文章推荐
- Go 从入门到精通(三)字符串,时间,流程控制,函数
- Python 3从入门到精通8-时间函数
- 2.Scala函数定义、流程控制、异常处理入门实战
- Go学习笔记 (二) : 流程控制(if,for,switch) 与 函数 与 struct (匿名字段)
- Python学习(二):入门篇:python中流程控制与函数编写
- go 函数和流程控制
- Scala学习笔记05【Scala函数定义、流程控制、异常入门】
- Scala 深入浅出实战经典 第2讲 Scala函数定义、流程控制、异常处理入门实战
- 002-Scala函数定义、流程控制、异常处理入门实战
- 四、基础 函数(数学 日期 字符串)、流程控制、循环
- go语言快速入门:流程控制(7)
- Dt大数据梦工厂王家林老师 Scala实战详解之 第2讲Scala函数定义,流程控制,异常处理入门实战
- 王家林亲传《DT大数据梦工厂》第二讲Scala函数定义、流程控制、异常处理入门
- 【R】R变量规则、运算、流程控制、函数、字符串
- MySQL入门-函数/游标/存储过程/流程控制语句
- php学习基础篇之基础函数(数学 日期 字符串)、php循环流程控制
- Go语言中的流程控制结构和函数详解
- go流程控制与函数
- 02Scala-函数定义、流程控制、异常处理入门实战
- 算法入门—字符串,文件,时间,类型函数积累