2022-4-22 实习Day20

1、新贸金账户行关联表信息配置 –3小时 80%
2、新贸金系统汇出汇款业务手动测试。–3小时 80%

Golang编程学习(part 16)

1、函数参数的传递方式

① 值传递:基本数据类型 int系列、float系列、bool、string、数组、结构体struct
② 引用传递:指针、slice切片、map、管道chan、interface等都是引用类型
其实,不管是值传递还是引用传递,传递的都是变量的副本,不同的是,值传递的是值的拷贝,引用传递的是地址的拷贝,一般来说地址拷贝效率高,因为数据量小,而值拷贝效率决定拷贝的数据大小,数据越大,效率越低

2、变量作用域

① 函数内部声明/定义的变量叫局部变量,作用域仅限于函数内部
② 函数外部声明/定义的变量叫做全局变量,作用域在整个包都有效,如果首字母为大写,则作用域在整个程序有效
③ 如果变量是在一个代码块,比如for/if中,那么这个变量的作用域就在该代码块
1
2
3
4
5
6
7
8
var Age int = 20	// ok
Name := "tom" // var Name string Name = "tom"
func main(){
fmt.Println("name",Name)
}

第二行会报错:因为 Name := "tom" 等价 var Name string Name = "tom"
赋值语句不能在函数体外,所以错
1
2
3
4
5
6
7
// 编写函数,对给定的一个二维数组(3x3)转置,这个题讲数组时候再完成
/*
1 2 3 1 4 7
4 5 6 ========> 2 5 8
7 8 9 3 6 9
*/

3、字符串常用的系统函数

① 统计字符串长度,按字节 len(str)
1
2
3
4
5
6
7
8
9
10
11
12
package main
import (
"fmt"
)
func main() {
// Golang的编码统一为utf-8 (ascii的字符[字母和数字] 占一个字节,汉字占3个)
str := "hello,Golang"
str1 := "hello,Go语言"
fmt.Println(len(str)) //12
fmt.Println(len(str1)) //14
}

② 字符串遍历,同时处理有中文的问题 r:=[]rune(str)
1
2
3
4
5
6
7
8
9
10
11
12
13
package main
import (
"fmt"
)
func main() {
str := "Golang,协程真牛批"
r := []rune(str)
for i := 0; i < len(r); i++ {
fmt.Printf("%c\n", r[i])
}
fmt.Println(len(r)) //12
}

③ 字符串转整数:n , err := strconv.Atoi(“12”),这边的字符串只能是数字,不然报错
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main
import (
"fmt"
"strconv"
)
func main() {
// 转换错误 strconv.Atoi: parsing "hello": invalid syntax
// n, err := strconv.Atoi("hello")
n, err := strconv.Atoi("18") //转换的结果是 18
if err != nil {
fmt.Println("转换错误", err)
} else {
fmt.Println("转换的结果是", n)
}
}

④ 整数转字符串 str := strconv.Itoa(1234)
1
2
3
4
5
6
7
8
9
package main
import (
"fmt"
"strconv"
)
func main() {
str := strconv.Itoa(1234)
fmt.Printf("str=%v,strType=%T", str, str)
}
⑤ 字符串转 []byte: var bytes=[]byte(“hello go”)
1
2
var bytes = []byte("hello go")
fmt.Printf("bytes=%v\n",bytes) // bytes=[104 101 108 108 111 32 103 111]
⑥ []byte转字符串:str=string([]byte{97,98,99})
1
2
str := string([]byte{97,98,99})
fmt.Printf("str=%v\n",str) // str=abc
⑦ 10进制转2,8,16进制,str=strconv.FormatInt(123,2) [支持2~36进制]
1
2
3
4
str := strconv.FormatInt( 123 , 2 )
fmt.Printf("123对应的二进制就是=%v\n",str) // 123对应的二进制就是=1111011
str = strconv.FormatInt( 123 , 16 )
fmt.Printf("123对应的16进制是=%v\n",str) // 123对应的16进制是=7b
⑧ 查找子串是否在指定的字符串中:strings.Contains(“seafood”,”foo”)
1
2
b := strings.Contains("seafood", "mary")
fmt.Println(b) // false
⑨ 统计一个字符串有几个指定的子串:strings.Count(“cheese”,”e”)
1
2
num := strings.Count("cheese","e")
fmt.Printf("num=%v\n",num) // num=3
⑩ 不区分大小写的字符串比较(==是区分大小写的比较):fmt.Println(strings.EqualFold(“abc”,”Abc”))
1
2
3
b := strings.EqualFold("abc", "Abc")
fmt.Printf("b=%v\n", b) // true
fmt.Println("结果", "abc" == "Abc") //false 区分大小写
①① 返回子串在字符串第一次出现的index值,如果没有返回-1:strings.Index(“NLT_abc”,”abc”) //4
1
2
index := strings.Index("NLT_abcabcabc", "abc")
fmt.Printf("index=%v\n", index) //index=4
①② 返回子串在字符串最后一次出现的index,如果没有返回-1:
1
2
index := strings.LastIndex("go golang", "go")
fmt.Printf("index=%v\n", index) //index=3
①③ 将指定的字串替换成另外一个字串:strings.Replace(“go go hello”,”go”,”go语言”,n) n可以指你希望替换几个,如果n=-1表示全部替换
1
2
3
4
5
str := "go go hello"
str1 := strings.Replace(str, "go", "北京", -1)
fmt.Printf("str=%v\nstr1=%v\n", str, str1)
// str=go go hello
// str1=北京 北京 hello
①④ 按照指定的某个字符,为分割标识,将一个字符串拆分成字符串数组:strings.Split(“hello,world,ok”, “,”)
1
2
3
4
5
6
7
8
9
10
strArr := strings.Split("hello,world,ok", ",")
for i := 0; i < len(strArr); i++ {
fmt.Printf("str[%v]=%v\n", i, strArr[i])
}
fmt.Printf("strArr=%v\n", strArr)

str[0]=hello
str[1]=world
str[2]=ok
strArr=[hello world ok]
①⑤ 将字符串的字母进行大小写的转换:strings.ToLower(“Go”) //go strings.ToUpper(“Go”) //GO
1
2
3
4
5
str := "goLang Hello"
str = strings.ToLower(str)
fmt.Println(str) // golang hello
str = strings.ToUpper(str)
fmt.Println(str) // GOLANG HELLO
①⑥ 将字符串左右两边的空格去掉:strings.TrimSpace(“ tn a long gopher ntrn “)
1
2
str := strings.TrimSpace("  tn a long gopher ntrn  ")
fmt.Println(str) //tn a long gopher ntrn
①⑦ 将字符串左右两边指定的字符去掉:strings.Trim(“! hello !”,”!”) //[“hello”],将左右两边!和” “去掉
1
2
str := strings.Trim("! hello! ", " !")
fmt.Printf("str=%q\n", str)
①⑧ 将字符串左边指定的字符去掉:strings.TrimLeft(“! hello! “,” !”)//[“hello! “]将左边!和” “去掉
①⑨ 将字符串右边指定的字符去掉:strings.TrimRight(“! hello! “,” !”)//[“! hello”]将右边!和” “去掉
②〇 判断字符串是否以指定的字符串开头:strings.HasPrefix(“ftp://192.168.10.1","ftp") //true
②① 判断字符串是否以指定的字符串结束:strings.HasSuffix(“NLT_abc.jpg”,”abc”) //false