字典和字符串用起来和Python很类似。但是GO多了字符串和其他类型的转换。在转换过程中如果失败,用err进行定义。因此有时候转换的时候,输入是有2个参数的。
package main
import (
"fmt"
"strconv" //字符串类型转换时导入
"strings" //字符串的string操作时导入
"unicode/utf8" //包含中文的切片操作时导入
)
func main(){
//字典:
var m1 map[string]int
m1 = make(map[string]int)
m1["a"] = 1
m1["b"] = 2
m1["c"] = 3
fmt.Println(m1)
m2 :=make (map[string]interface{},10)
m2["a"] = 1
m2["b"] = "love"
m2["c"] = 3
fmt.Println(m2)
fmt.Println(len(m2))
//输出相应key的value
fmt.Println(m2["b"])
//使用循环遍历字典
for key,value := range m2 {
fmt.Println("key is", key, ";" ,"value is", value)
}
//遍历的结果虽然一样,但是顺序不一样。这点和Python相同
//字典是无序的,因此不能用切片,不能用角标索引。
//且满足Key:Value的关系。一般是不定长,若不知道value的类型,可以使用interface{},不指定类型
//字符串
//可哈希,意味着字符串一旦定义,不能被改变。只能通过字节切片[]byte或者[]rune的方式进行修改
//byte 等同于int8,常用来处理ascii字符
//rune 等同于int32,常用来处理unicode或utf-8字符
//''的类型是rune
//""的类型是string
s := "Hello"
b :=[]byte(s)
b[0]='h'
//使用"",则会报错cannot use "h" (type untyped string) as type byte in assignment
b[1]='E'
s = string(b)
fmt.Println(s)
fmt.Println(len(s))
fmt.Println((s[0])) //输出为104,ASCII码对应的是h
ss := "Hello我哎"
bb :=[]rune(ss)
fmt.Println(bb) //[72 101 108 108 111 25105 21710]
bb[0]='h'
//使用"",则会报错cannot use "h" (type untyped string) as type byte in assignment
bb[1]='E'
ss = string(bb)
fmt.Println(ss)
fmt.Println(len([]rune(ss))) //7
fmt.Println((ss[0])) //输出为104,ASCII码对应的是h
//包含有中文的切片操作。
//使用rune。中文一般对应2个字符长度。
str :="Go来吧"
fmt.Println(len(str)) //8
fmt.Println(utf8.RuneCountInString(str)) //将字符串转换成rune //4
runeint32 := []rune(str)
for i := range runeint32{
fmt.Printf("%c\n",runeint32[i])
}
//输出有乱码,原因就是使用了byte 8位输出
bi := []byte(str)
for i := range bi{
fmt.Printf("%c\n",bi[i]) //Go��
}
//字符串操作:
//和Python类似,有contains ,HasPrefix,HasSuffix,Replace, Split
//ToLower, ToUpper, Repeat, Count, Index,Join
// https://blog.csdn.net/nyist_zxp/article/details/109154160
sen := "TodaY is is is Friday"
//contains
fmt.Println(strings.Contains(sen,"day")) //true
//HasPrefix
fmt.Println(strings.HasPrefix(sen,"F")) //false
//HasSuffix
fmt.Println(strings.HasSuffix(sen,"y")) //true
//Replace
fmt.Println(strings.Replace(sen,"is","IS VERY",2)) //TodaY IS VERY IS VERY is Friday
//Split
fmt.Println(strings.Split(sen,"")) //[T o d a Y i s i s i s F r i d a y]
//ToLower变小写,ToUpper变大写
fmt.Println(strings.ToLower(sen)) //today is is is friday
fmt.Println(strings.ToUpper(sen)) //TODAY IS IS IS FRIDAY
//Repeat,输入0和-1时报错
fmt.Println(strings.Repeat(sen,2))
//Count
fmt.Println(strings.Count(sen,"a")) //2
fmt.Println(strings.Count(sen,"")) //22 返回sen+1 的个数
//Index
fmt.Println(strings.Index(sen,"i"))//6
//Join
sen2 :=[]string{"I","Love","you"}
fmt.Println(strings.Join(sen2,"-")) //I-Love-you
fmt.Println(strings.Join(sen2," ")) //I Love you
//字符串类型的转换:strcov
//https://www.cnblogs.com/saryli/p/13279643.html
//字符串转int:Atoi()
//int转字符串: Itoa()
//ParseTP类函数将string转换为TP类型:ParseBool()、ParseFloat()、ParseInt()、ParseUint()。因为string转其它类型可能会失败,所以这些函数都有第二个返回值表示是否转换成功
//FormatTP类函数将其它类型转string:FormatBool()、FormatFloat()、FormatInt()、FormatUint()
//AppendTP类函数用于将TP转换成字符串后append到一个slice中:AppendBool()、AppendFloat()、AppendInt()、AppendUint()
//1.int转换为字符串:Itoa()
fmt.Println("a"+strconv.Itoa(666)) //a666
//2.string转换为int:Atoi()
//由于string可能无法转换为int,所以这个函数有两个返回值:第一个返回值是转换成int的值,第二个返回值判断是否转换成功
i,err := strconv.Atoi("a")
if err != nil {
fmt.Printf("convert failed")
}
fmt.Println(i)
//Parse类函数用于转换字符串为给定类型的值:ParseBool()、ParseFloat()、ParseInt()、ParseUint()。
b2, err := strconv.ParseBool("love")
f2, err := strconv.ParseFloat("3.1415", 64)
i2, err := strconv.ParseInt("-42", 10, 64)
u2, err := strconv.ParseUint("42", 10, 64)
fmt.Println(b2,f2,i2,u2) //false 3.1415 -42 42
//bitSize参数表示转换为什么位的int/uint,有效值为0、8、16、32、64。当bitSize=0的时候,表示转换为int或uint类型。
//例如bitSize=8表示转换后的值的类型为int8或uint8
//base参数表示以什么进制的方式去解析给定的字符串,有效值为0、2-36。当base=0的时候,表示根据string的前缀来判断以什么进制去解析:
//0x开头的以16进制的方式去解析,0开头的以8进制方式去解析,其它的以10进制方式解析。
//将给定类型格式化为string类型:
//FormatBool()、FormatFloat()、FormatInt()、FormatUint()
b3 := strconv.FormatBool(true)
c3 := strconv.FormatFloat(3.1415, 'E', -1, 64)
d3 := strconv.FormatInt(-42, 10)
e3 := strconv.FormatUint(42, 10)
fmt.Println(b3,c3,d3,e3) //true 3.1415E+00 -42 42
//prec控制精度(排除指数部分):对'f'、'e'、'E',它表示小数点后的数字个数;对'g'、'G',它控制总的数字个数。
//如果prec 为-1,则代表使用最少数量的、但又必需的数字来表示f。
}
输出结果
map[a:1 b:2 c:3]
map[a:1 b:love c:3]
3
love
key is a ; value is 1
key is b ; value is love
key is c ; value is 3
hEllo
5
104
[72 101 108 108 111 25105 21710]
hEllo我哎
7
104
8
4
G
o
来
吧
G
o
æ
�
¥
å
�
§
true
false
true
TodaY IS VERY IS VERY is Friday
[T o d a Y i s i s i s F r i d a y]
today is is is friday
TODAY IS IS IS FRIDAY
TodaY is is is FridayTodaY is is is Friday
2
22
6
I-Love-you
I Love you
a666
convert failed0
false 3.1415 -42 42
true 3.1415E+00 -42 42