go语言学习【八】

defer的使用

defer是一种延时机制,可以先执行函数体内其他语句在执行defer后面的语句,并且运行原理为当程序执行到defer语句时,先将defer压入另外的栈中,并且将变量的值也复制一份。当执行完其他的语句后再调用栈中的语句,遵循先入后出的规则来释放栈中的语句。执行完后再执行main函数。这种方式会释放栈中的资源,这样以后我们就不用为何时释放资源而烦恼,提高程序运行效率。

package main

import (
	"fmt"
)

func main() {
	n1 := 10
	n2 := 20

	res := sum(n1, n2)
	fmt.Println("test4  res=", res)

}
func sum(n1 int, n2 int) int {
	defer fmt.Println("test1 n1=", n1)
	defer fmt.Println("test2 n2=", n2)
	n1++
	n2++
	res := n1 + n2
	fmt.Println("test3 res=", res)
	return res
}

在这里插入图片描述

值传递和引用传递

在这里插入图片描述
在这里插入图片描述

变量的作用域

==注意在定义全局变量时,不能直接使用类型推导,也就是 := ,因为:=实际上是两条语句:var i int ,i=xxx;其中i=xxx是赋值语句,不能在函数体外使用,只能在函数体内使用:=符号。

字符串常用内置函数

len(string/arr)

返回字符串的长度,中文占三个字节。与c占两个字节不一样。

package main

import "fmt"

func main() {
	a := "hello中"
	fmt.Println(len(a))
}

在这里插入图片描述

字符串的遍历(包含中文的遍历)

package main

import "fmt"

func main() {
	a := "hello中"
	r := []rune(a)
	for i := 0; i < len(r); i++ {
		fmt.Printf("字符=%c\n", r[i])
	}
}

在这里插入图片描述

字符串数字转成整数

package main

import (
	"fmt"
	"strconv"
)

func main() {
	ts1, err := strconv.Atoi("123")
	if err != nil {
		fmt.Println("转换错误!")
	} else {
		fmt.Println("转换成功,结果为:", ts1)
	}
	ts2, err := strconv.Atoi("hello")
	if err != nil {
		fmt.Println("转换错误!")
	} else {
		fmt.Println("转换成功,结果为:", ts2)
	}
}

在这里插入图片描述

整数转字符串

package main

import (
	"fmt"
	"strconv"
)

func main() {
	str := strconv.Itoa(234)
	fmt.Printf("str=%v,str=%T", str, str)
}

在这里插入图片描述

字符串转成byte

package main

import "fmt"

func main() {
	var bytes = []byte("hello")
	fmt.Printf("bytes=%v\n", bytes)
}

在这里插入图片描述

byte转字符串

package main

import "fmt"

func main() {

	str := string([]byte{97, 98, 99})
	fmt.Printf("str=%v", str)

}

在这里插入图片描述

进制转换

package main

import (
	"fmt"
	"strconv"
)

func main() {
	test1 := strconv.FormatInt(444, 2)
	test2 := strconv.FormatInt(444, 8)
	fmt.Printf("test1=%v\n", test1)
	fmt.Printf("test2=%v\n", test2)
}

在这里插入代码片在这里插入图片描述

查找字符串是否在指定字符串中

返回值为bool值

package main

import (
	"fmt"
	"strings"
)

func main() {
	test := strings.Contains("hello中国", "中国")
	fmt.Printf("结果为:%v", test)
}

在这里插入图片描述

查找字符串中有几个指定的字符串

package main

import (
	"fmt"
	"strings"
)

func main() {
	test := strings.Count("chinese", "e")
	fmt.Println("test:", test)
	test2 := strings.Count("中国是一个国家", "中国人")
	fmt.Println("test2:", test2)
}

在这里插入图片描述

以不区分大小写的方式比较字符串

test:=strings.EqualFold("abc","Abc")//true

返回子串第一次出现的位置

b:=strings.Index("ASD_abc","abc")//4

注意下标从0开始
没有返回-1。

返回子串最后出现的位置

b:=strings.LastIndex("fyf fyfvv")//4

将指定的字串换成另一个字串

strings.Replace("一个字符串或者字符串数组","被替换的字符","所希望替换的字符",n)
//n=-1时表示全部替换,其他则表示替换的个数
strings.Replace("go go fyf","go","江西",n)//输出:江西 江西 fyf

以某个字符为分割标识,将字符串拆成字符数组

strArry:=strings.Split("hello,world,fyf",",")
fmt.Println(strArry)//输出[hello world fyf]

将字符串进行大小写的转换

str:=strings.ToLower("fyF")//输出fyf
str1:=strings.ToUpper("jxlG")//输出JXLG

将字符串左右两边的空格去掉

strings.TrimSpace("  I am chinese !  ")//将输出"I am chinese !"

将字符串左右两边指定的字串去掉

strings.Trim("! really? !"," !")//将左右两边的空格和!号去掉,将输出"really?"

将左边指定的字符去掉或者右边的去掉

strings.TrimLeft("! hello!"," !")//输出"hello!"注意左边的空格没了
strings.TrimRight("! hello! !"," !")//输出"! hello"

判断字符串是否以指定字符串开头或结尾

strings.HasPrefix("http://aaa","http")//true
strings.HasSuffix("asddd","sj")//false

time时间函数

package main

import (
	"fmt"
	"time"
)

func main() {
	now := time.Now()
	fmt.Println(now)
	fmt.Println(now.Year()) //输出当前年份,同理还有月份,日期等函数
	//另一种格式化输出
	fmt.Println(now.Format("2006-01-02 15:04:05")) //其中format函数中的数字不能改
	fmt.Println(now.Format("2006"))                //输出当前年份
}

在这里插入图片描述

time时间常量的使用与sleep的结合

package main

import (
	"fmt"
	"time"
)

func main() {
	i := 0
	for {
		i++
		fmt.Println(i)
		time.Sleep(time.Second * 3) //每过三秒打印i
		if i == 10 {
			break
		}
	}
}

unix时间戳

package main

import (
	"fmt"
	"time"
)

func main() {
	now := time.Now()
	fmt.Printf("unix=%v unixnano=%v", now.Unix(), now.UnixNano()) //unixnano精确到纳秒
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值