一、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 = 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函数的特点

  1. 不支持重载,一个包不能包含连个名字一样的函数
  2. 函数是一等公民,函数也是一种类型,一个函数可以赋值给变量
  3. 匿名函数
  4. 多返回值

其他几个概念可能都好理解,我们这里主要说说第二条,函数也是一种类型,一个函数可以赋值给变量

通过下面的例子演示

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用途

  1. 当函数返回时,执行defer语句,因此,可以用来做资源清理

  2. 多个defer语句,按先进后厨的方式执行

  3. defer语句中变量,在defer声明时就决定了

通过下面的例子理解:

package main
import "fmt" func main() {
a:=0
defer fmt.Println("defer---->",a)
a++
fmt.Println(a) }

结果会在最后打印defer---->0 ,这里就体现了defer语句中变量,在defer声明时就决定了

Go 从入门到精通(三)字符串,时间,流程控制,函数的更多相关文章

  1. Java入门篇(三)——Java流程控制

    前两篇已经了解了Java语言基础,本篇开始Java的流程控制.流程控制对任何一门编程语言都是至关重要的,它提供了控制程序步骤的基本手段. 一.复合语句 Java语言的复合语句是以整个块区为单位的语句, ...

  2. iOS开发-UI 从入门到精通(三)

    iOS开发-UI 从入门到精通(三)是对 iOS开发-UI 从入门到精通(一)知识点的综合练习,搭建一个简单地登陆界面,增强实战经验,为以后做开发打下坚实的基础! ※在这里我们还要强调一下,开发环境和 ...

  3. python入门到精通[三]:基础学习(2)

    摘要:Python基础学习:列表.元组.字典.函数.序列化.正则.模块. 上一节学习了字符串.流程控制.文件及目录操作,这节介绍下列表.元组.字典.函数.序列化.正则.模块. 1.列表 python中 ...

  4. visual studio 2015 搭建python开发环境,python入门到精通[三]

    在上一篇博客Windows搭建python开发环境,python入门到精通[一]很多园友提到希望使用visual studio 2013/visual studio 2015 python做demo, ...

  5. MyBatis从入门到精通(三):MyBatis XML方式的基本用法之多表查询

    最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 1. 多表查询 上篇博客中,我们示例的 ...

  6. golang(3):strings和strconv使用 & 时间和日期类型 & 指针类型 & 流程控制 & 函数

    strings和strconv使用 . strings.HasPrefix(s string, prefix string) bool: // 判断字符串s是否以prefix开头 . . string ...

  7. java面向对象编程—— 第三章 程序流程控制

    3.1流程控制 三种基本技术可以改变程序的控制流程: ①   调用方法:调用方法将导致控制流程离开当前方法,转移到被调用的方法: ②   选择:java中有两种做出选择的机制:if/else语句和sw ...

  8. shell(三)if流程控制

    流程控制 if 流程控制 基本语法 单分支结构 if [];then fi 两分支结构 if [];then else fi 多分支结构 if [];then elif[];then elif[];t ...

  9. go语言入门(3)运算符及流程控制

    1,运算符 算数运算符:+   -   *   /   %   ++   -- 关系运算符:==    !=    <    >    <=    >== 逻辑运算符:按位与 ...

  10. [易学易懂系列|rustlang语言|零基础|快速入门|(9)|Control Flows流程控制]

    [易学易懂系列|rustlang语言|零基础|快速入门|(9)] 有意思的基础知识 Control Flows 我们今天再来看看流程控制. 条件控制 if-else if -else: / Simpl ...

随机推荐

  1. SQL SERVER大话存储结构(2)_非聚集索引如何查找到行记录

              如果转载,请注明博文来源: www.cnblogs.com/xinysu/   ,版权归 博客园 苏家小萝卜 所有.望各位支持!      1 行记录如何存储     这里引入两个 ...

  2. 记事本app TOP5(个人观点)

    1.为知笔记 为知笔记定位于高效率工作笔记,主打工作笔记的移动应用,是目前国内唯一一款"工作笔记"的云笔记类产品.除了常用的笔记功能保存的网页.灵感笔记.重要文档.照片.便签等,为 ...

  3. LeetCode4. Median of Two Sorted Arrays---vector实现O(log(m+n)--- findkth

    这道题目和PAT上的1029是同一题.但是PAT1029用O(m+n)的时间复杂度(题解)就可以,这道题要求是O(log(m+n)). 这道题花费了我一个工作日的时间来思考.因为是log因而一直思考如 ...

  4. Maven学习-Profile详解

    Profile能让你为一个特殊的环境自定义一个特殊的构建:profile使得不同环境间构建的可移植性成为可能.Maven中的profile是一组可选的配置,可以用来设置或者覆盖配置默认值.有了prof ...

  5. 如何实现在Windows上运行Linux程序,附示例代码

    微软在去年发布了Bash On Windows, 这项技术允许在Windows上运行Linux程序, 我相信已经有很多文章解释过Bash On Windows的原理, 而今天的这篇文章将会讲解如何自己 ...

  6. python课时二

    通过上个博客的学习,相信大家已经对Python是什么东西应该有了相对应的了解,这里也包括Python的一些语法(比如Python在写for循环和if判断的时候都是会有缩进的).这张博客大概会对Pyth ...

  7. 华为ensp模拟某公司网络架构及配置详解

    1.先晒下架构图,二层设备省略..... 2.下面开始具体配置详解 2.1.从路由器开始配置,先用远程工具远程AR1220F-S路由,secureCRT ,putty,xshell任选其中一个均可,功 ...

  8. javaScript 设计模式系列之一:观察者模式

    介绍 观察者模式又叫发布订阅模式(Publish/Subscribe),一个目标对象管理所有相依于它的观察者对象.该模式中存在两个角色:观察者和被观察者.目标对象与观察者之间的抽象耦合关系能够单独扩展 ...

  9. 关于Java解压文件的一些坑及经验分享(MALFORMED异常)

    文章也已经同步到我的csdn博客: http://blog.csdn.net/u012881584/article/details/72615481 关于Java解压文件的一些坑及经验分享 就在本周, ...

  10. swift pod第三方OC库使用use_frameworks!导致#import提示无法找到头文件

    以MBProgressHUD为例子 swift中Podfile文件一般都会加上use_frameworks! 这样就可以直接通过import MBProgressHUD来访问MBProgressHUD ...