golang基础之三-字符串,时间,流程控制,函数
strings和strconv的使用
strings
strings.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中首次出现的位置,如果没有出现,则返回-1
strings.LastIndex(s string,str string) int:
判断str在s中最后出现的位置,如果没有出现,则返回-1
strings.Replace(str string,old string,new string,n int):
字符串替换
strings.Count(str string,count int)string:
字符串计数
strings.Repeat(str string,count int) string:
重复count次str
strings.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空格分隔的所有子串的slice
string.Split(str string,split string):
返回str split分割的所有子串的slice
strings.Join(s1 []string,sep string):
用sep把s1中的所有元素连接起来
strconv
scronv.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 =
//通过&a打印a的指针地址
fmt.Println(&a)
//定义一个指针类型的变量p
var p *int
//讲a的指针地址复制给p
p = &a
fmt.Println(*p)
//给指针p赋值
*p =
fmt.Println(a)
}
指针类型
普通的类型,变量存的就是值,也叫值类型
获取变量的地址,用&,
指针类型,变量存的是一个地址,这个地址存的才是真正的值
获取指针类型所指向的值,用*,例如:var *p int, 使用 *p获取p指向值
通过下面的代码例子理解:
package main
import "fmt"
func main() {
var a int =
fmt.Println(&a)
var p *int
p = &a
fmt.Println(*p)
*p =
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 =
switch a {
case :
fmt.Println("a 等于0")
fallthrough
case :
fmt.Println("a等于1")
default:
fmt.Println("a等于默认值")
}
}
如果我们没有添加fallthrough只会打印a等于0,但是现在回把case1中的打印内容也打印出来
同样这里我们需要知道case 后面是可以写条件的
for语句
语法
for 初始化变量;条件判断;变量修改{
}
一个简单的例子
for i:=;i<;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:=;i<;i++{
for j:=;j<;j++{
if j == {
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 :=
HEAR:
fmt.Println(i)
i++
if i == {
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,,)
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:=
defer fmt.Println("defer---->",a)
a++
fmt.Println(a) }
结果会在最后打印defer---->0 ,这里就体现了defer语句中变量,在defer声明时就决定了
转自https://www.cnblogs.com/zhaof/p/7072122.html
golang基础之三-字符串,时间,流程控制,函数的更多相关文章
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
- 038 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 05 案例演示switch结构-星期的表示案例以及总结
038 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 05 案例演示switch结构-星期的表示案例以及总结 本文知识点:案例演示switch结构并对sw ...
- GoLang基础数据类型--->字符串处理大全
GoLang基础数据类型--->字符串处理大全 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入: 高级运维工程师之路 59843264 ...
- Java04-Java语法基础(三)流程控制
Java04-Java语法基础(三)流程控制 一.数据类型的转换 1.自动转换:在赋值运算中,占字节数大的类型会自动向字节小的类型转换 double d1 = 3.14; int t1 = d1; 2 ...
- 053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结
053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结 本文知识点: 流程控制知识总结 流程控制知识总结 选择结构语句 循环结构语句 ...
- 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序
052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...
- 050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句
050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句 本文知识点:continue语句 continue语句 continue ...
- 049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句
049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句 本文知识点:break语句 break语句 break语句前情回顾 1.swi ...
- 048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例——阶乘的累加和
048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例--阶乘的累加和 本文知识点:通过案例练习嵌套循环应用 案例练习--阶乘的累加和 案例题目 ...
随机推荐
- 扔几道sb题
1.给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间. 你能求 ...
- 【learning】中国剩余定理
问题描述 "今有物不知其数,三三数之余二,五五数之余三,七七数之余二.问物几何?" emmm这是..最开始这个问题被提出来的描述 其实说白了就是求解一次同余式组 然后还可以..解决 ...
- 【recording】gdoi2018
怎么说..虽然感觉其实..不太想写游记.. 但是回来看着桌面上的课本还是忍不住了(想想班里进度就..qwq)还是写一下吧 Day x(x<0) 之前大家溜到首都开心集训了一波然后被虐的很开心.. ...
- 用Visual C#开发基于OpenCV的Windows应用程序
http://blog.163.com/wangxh_jy/blog/static/28233883201001581640283/ 关于详细的配置及程序运行截图,请下载:http://downloa ...
- 回顾static与final的作用
static是java中非常重要的一个关键字,而且它的用法也很丰富,主要有四种用法: 用来修饰成员变量,将其变为类的成员,从而实现所有对象对于该成员的共享: 用来修饰成员方法,将其变为类方法,可以直接 ...
- C++单例模式设计与实现
C++单例模式主要用途就是整个程序中只实例化一个对象,之后获取到的都是该对象本身进行处理问题. 单例模式一般都是在函数中采用局部静态变量完成的,因为局部的静态变量生命周期是随着程序的生命周期 一起结束 ...
- Libevent学习笔记(四) bufferevent 的 concepts and basics
Bufferevents and evbuffers Every bufferevent has an input buffer and an output buffer. These are of ...
- 斯皮尔曼等级相关(Spearman’s correlation coefficient for ranked data)
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- CF839 B 贪心
很玄的一道贪心题,大意是给出k排 XX - XXXX - XX这样的座位,有n个团体,要求不同团体不能相邻而坐,中间可以空一个座位或是由走廊隔开. 很明显最先想到可以以2为单位划分座位,但是中间4连座 ...
- Linux 中的变量
echo $PATH var =a echo $var export var1=11 echo $var 访问关系: whereis yum file /usr/bin/yum vi /usr ...