目录
1. int 到 string
// int 到 string
string:=strconv.Itoa(int)
// int64 到 string
// FormatUint 将 int 型整数 i 转换为字符串形式
// base:进位制(2 进制到 36 进制)
// 大于 10 进制的数,返回值使用小写字母 'a' 到 'z'
func FormatInt(i int64, base int) string
i := int64(-2048)
fmt.Println(strconv.FormatInt(i, 2)) // -100000000000
fmt.Println(strconv.FormatInt(i, 8)) // -4000
fmt.Println(strconv.FormatInt(i, 10)) // -2048
fmt.Println(strconv.FormatInt(i, 16)) // -800
fmt.Println(strconv.FormatInt(i, 36)) // -1kw
//Uint到string
// FormatUint 将 uint 型整数 i 转换为字符串形式
// base:进位制(2 进制到 36 进制)
// 大于 10 进制的数,返回值使用小写字母 'a' 到 'z'
func FormatUint(i uint64, base int) string
i := uint64(2048)
fmt.Println(strconv.FormatUint(i, 2)) // 100000000000
fmt.Println(strconv.FormatUint(i, 8)) // 4000
fmt.Println(strconv.FormatUint(i, 10)) // 2048
fmt.Println(strconv.FormatUint(i, 16)) // 800
fmt.Println(strconv.FormatUint(i, 36)) // 1kw
2. float 到 string
// FormatFloat 将浮点数 f 转换为字符串值
// f:要转换的浮点数
// fmt:格式标记(b、e、E、f、g、G)
// prec:精度(数字部分的长度,不包括指数部分)
// bitSize:指定浮点类型(32:float32、64:float64)
// 格式标记:
// 'b' (-ddddp±ddd,二进制指数)
// 'e' (-d.dddde±dd,十进制指数)
// 'E' (-d.ddddE±dd,十进制指数)
// 'f' (-ddd.dddd,没有指数)
// 'g' ('e':大指数,'f':其它情况)
// 'G' ('E':大指数,'f':其它情况)
//
// 如果格式标记为 'e','E'和'f',则 prec 表示小数点后的数字位数
// 如果格式标记为 'g','G',则 prec 表示总的数字位数(整数部分+小数部分)
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
f := 100.12345678901234567890123456789
fmt.Println(strconv.FormatFloat(f, 'b', 5, 32)) // 13123382p-17
fmt.Println(strconv.FormatFloat(f, 'e', 5, 32)) // 1.00123e+02
fmt.Println(strconv.FormatFloat(f, 'E', 5, 32))
3. bool 到 string
fmt.Println(strconv.FormatBool(0 < 1)) // true
fmt.Println(strconv.FormatBool(0 > 1)) // false
4. string 到 int
// ParseInt 将字符串转换为 int 类型
// s:要转换的字符串
// base:进位制(2 进制到 36 进制)
// bitSize:指定整数类型(0:int、8:int8、16:int16、32:int32、64:int64)
// 返回转换后的结果和转换时遇到的错误
// 如果 base 为 0,则根据字符串的前缀判断进位制(0x:16,0:8,其它:10)
func ParseInt(s string, base int, bitSize int) (i int64, err error)
// string 到 int8,10进制
fmt.Println(strconv.ParseInt("123", 10, 8))
// string 到 int64,10进制
fmt.Println(strconv.ParseInt("123", 10, 64))
// string到uint
// ParseUint 功能同 ParseInt 一样,只不过返回 uint 类型整数
func ParseUint(s string, base int, bitSize int) (n uint64, err error)
// string 到 uint8,16进制
fmt.Println(strconv.ParseUint("FF", 16, 8))
5. string 到 float
// s:要转换的字符串
// bitSize:指定浮点类型(32:float32、64:float64)
// 如果 s 是合法的格式,而且接近一个浮点值,
// 则返回浮点数的四舍五入值(依据 IEEE754 的四舍五入标准)
// 如果 s 不是合法的格式,则返回“语法错误”
// 如果转换结果超出 bitSize 范围,则返回“超出范围”
func ParseFloat(s string, bitSize int) (f float64, err error)
s := "0.12345678901234567890"
f, err := strconv.ParseFloat(s, 32)
fmt.Println(f, err) // 0.12345679104328156
6. string 到 bool
// ParseBool 将字符串转换为布尔值
// 它接受真值:1, t, T, TRUE, true, True
// 它接受假值:0, f, F, FALSE, false, False.
// 其它任何值都返回一个错误
strconv.ParseBool("1")
7. string 到 time
其中layout的时间必须是"2006-01-02 15:04:05"这个时间,不管格式如何,时间点一定得是这个,如:"Jan 2, 2006 at 3:04pm (MST)","2006-Jan-02"等。如换一个时间解析出来的时间就不对了,要特别注意这一点。
layout := ""2006-01-02 15:04:05.999999""
t, _ := time.Parse(layout, "2013-10-05 18:30:50")
fmt.Println(t.Year())
// 当前时区时间格式化转换
strTime := "2018-03-24T20:01:00+08:00"
tim, _:=time.ParseInLocation("2006-01-02T15:04:05+08:00", strTime, time.Local)
8. time 到 string
获取纳秒值
na:=time.Now().UnixNano()
获取毫秒值
na:=time.Now().UnixNano()//获取时间戳包含纳秒
fmt.Println(na / 1e6) //纳秒转毫秒
fmt.Println(na / 1e9) //纳秒转秒
获取秒值
miao:=time.Now().Unix()
time 转 string
time.Now().Format("2006-01-02 15:04")
年月日时分秒转time
the_time := time.Date(2014, 1, 7, 5, 50, 4, 0, time.Local)
unix_time := the_time.Unix()
fmt.Println(unix_time)
9. 示例:基本数据类型转 string
package main
import (
"fmt"
"strconv"
)
func main() {
var num1 int = 99
var num2 float64 = 23.456
var b bool = true
var myChar byte = 'h'
var str string
// 第一种方式, fmt.Sprintf方法
str = fmt.Sprintf("%d", num1)
fmt.Printf("str type %T str=%q\n", str, str)
str = fmt.Sprintf("%f", num2)
fmt.Printf("str type %T str=%q\n", str, str)
str = fmt.Sprintf("%t", b)
fmt.Printf("str type %T str=%q\n", str, str)
str = fmt.Sprintf("%c", myChar)
fmt.Printf("str type %T str=%q\n", str, str)
// 第二种方式, strconv 函数
var num3 int = 99
var num4 float64 = 23.456
var b2 bool = true
str = strconv.FormatInt(int64(num3), 10)
fmt.Printf("str type %T str=%q\n", str, str)
// strconv.FormatFloat(num4, 'f', 10, 64)
// 说明: 'f' 格式 10:表示小数位保留10位 64 :表示这个小数是float64
str = strconv.FormatFloat(num4, 'f', 10, 64)
fmt.Printf("str type %T str=%q\n", str, str)
str = strconv.FormatBool(b2)
fmt.Printf("str type %T str=%q\n", str, str)
// strconv包中有一个函数Itoa
var num5 int64 = 4567
str = strconv.Itoa(int(num5))
fmt.Printf("str type %T str=%q\n", str, str)
}
/*
str type string str="99"
str type string str="23.456000"
str type string str="true"
str type string str="h"
str type string str="99"
str type string str="23.4560000000"
str type string str="true"
str type string str="4567"
*/
10. 示例:string 转基本数据类型
package main
import (
"fmt"
"strconv"
)
func main() {
var str string = "true"
var b bool
// b, _ = strconv.ParseBool(str)
// 1. strconv.ParseBool(str) 函数会返回两个值 (value bool, err error)
// 2. 因为我只想获取到 value bool ,不想获取 err 所以我使用_忽略
b , _ = strconv.ParseBool(str)
fmt.Printf("b type %T b=%v\n", b, b)
var str2 string = "1234590"
var n1 int64
var n2 int
n1, _ = strconv.ParseInt(str2, 10, 64)
n2 = int(n1)
fmt.Printf("n1 type %T n1=%v\n", n1, n1)
fmt.Printf("n2 type %T n2=%v\n", n2, n2)
var str3 string = "123.456"
var f1 float64
f1, _ = strconv.ParseFloat(str3, 64)
fmt.Printf("f1 type %T f1=%v\n", f1, f1)
//注意:需要能转换成有效数据,否则会返回默认值
var str4 string = "hello"
var n3 int64 = 11
n3, _ = strconv.ParseInt(str4, 10, 64)
fmt.Printf("n3 type %T n3=%v\n", n3, n3)
}
/*
b type bool b=true
n1 type int64 n1=1234590
n2 type int n2=1234590
f1 type float64 f1=123.456
n3 type int64 n3=0
*/
11. String Functions
package main
import (
"fmt"
s "strings"
)
var p = fmt.Println
func main() {
p("Contains: ", s.Contains("test", "es")) // 是否包含
p("Count: ", s.Count("test", "t")) // 包含数量
p("HasPrefix: ", s.HasPrefix("test", "te")) // 是否以te开头
p("HasSuffix: ", s.HasSuffix("test", "st")) // 是否以st结尾
p("Index: ", s.Index("test", "e")) // 序号
p("Join: ", s.Join([]string{"a", "b"}, "-")) // 插入
p("Repeat: ", s.Repeat("a", 5)) // 重复
p("Replace: ", s.Replace("foo", "o", "0", -1)) // 全部替换
p("Replace: ", s.Replace("foo", "o", "0", 1)) // 替换第几个
p("Split: ", s.Split("a-b-c-d-e", "-")) // 按-切分为切片
p("ToLower: ", s.ToLower("TEST")) // 转小写字母
p("ToUpper: ", s.ToUpper("test")) // 转大写字母
p()
p("Len: ", len("hello")) // 字符长度
p("Char:", "hello"[1]) // 字符的utf-8编码
}
/*
Contains: true
Count: 2
HasPrefix: true
HasSuffix: true
Index: 1
Join: a-b
Repeat: aaaaa
Replace: f00
Replace: f0o
Split: [a b c d e]
ToLower: test
ToUpper: TEST
Len: 5
Char: 101
*/
12. String Formatting
package main
import (
"fmt"
"os"
)
type point struct {
x, y int
}
func main() {
p := point{1, 2}
fmt.Printf("%v\n", p)
fmt.Printf("%+v\n", p)
fmt.Printf("%#v\n", p)
fmt.Printf("%T\n", p)
fmt.Printf("%t\n", true)
fmt.Printf("%d\n", 123)
fmt.Printf("%b\n", 14)
fmt.Printf("%c\n", 33)
fmt.Printf("%x\n", 456)
fmt.Printf("%f\n", 78.9)
fmt.Printf("%e\n", 123400000.0)
fmt.Printf("%E\n", 123400000.0)
fmt.Printf("%s\n", "\"string\"")
fmt.Printf("%q\n", "\"string\"")
fmt.Printf("%x\n", "hex this")
fmt.Printf("%p\n", &p)
fmt.Printf("|%6d|%6d|\n", 12, 345)
fmt.Printf("|%6.2f|%6.2f|\n", 1.2, 3.45)
fmt.Printf("|%-6.2f|%-6.2f|\n", 1.2, 3.45)
fmt.Printf("|%6s|%6s|\n", "foo", "b")
fmt.Printf("|%-6s|%-6s|\n", "foo", "b")
s := fmt.Sprintf("a %s", "string")
fmt.Println(s)
fmt.Fprintf(os.Stderr, "an %s\n", "error")
}
/*
{1 2}
{x:1 y:2}
main.point{x:1, y:2}
main.point
true
123
1110
!
1c8
an error
78.900000
1.234000e+08
1.234000E+08
"string"
"\"string\""
6865782074686973
0xc000012090
| 12| 345|
| 1.20| 3.45|
|1.20 |3.45 |
| foo| b|
|foo |b |
a string
*/
13.字符串字面量
package main
import "fmt"
func main() {
fmt.Println("peace be upon you \nupon you be peace")
fmt.Println(`strings can span multiple lines with the \n escape sequence`) // 原始字符串字面量
fmt.Println(`
peace be upon you
upon you be peace`) // 制表符也会被正确打印
fmt.Printf("%v is a %[1]T\n","literal string")
fmt.Printf("%v is a %[1]T\n",`literal string`) // 无论是字符串字面量还是原始字符串,最终都将变成字符串
}
/*
peace be upon you
upon you be peace
strings can span multiple lines with the \n escape sequence
peace be upon you
upon you be peace
literal string is a string
literal string is a string
*/
14.字符处理
凯撒密码示例:
package main
import "fmt"
func main(){
c := 'a' // byte 类型用单引号,双引号默认是 string 类型
c = c + 3
fmt.Printf("%c\n",c) // 打印出“d”
c = c - 'a' + 'A' // 小写字母转换为大写字母
fmt.Printf("%c\n",c) // 打印出“D”
// 凯撒解密
message := "uv vagreangvbany fcnpr fgngvba"
for i := 0; i < len(message); i++{
char1 := message[i] // len 获取字符串长度
if char1 >= 'a' && char1 <= 'z'{ // 只转换小写字母
char1 = char1 + 13 // 转换按一定规律进行
if char1 > 'z'{ // 如果是大写字母,转换成小写
char1 = char1 -26
}
}
fmt.Printf("%c ",char1)
}
}
/*
d
D
h i i n t e r n a t i o n a l s p a c e s t a t i o n
*/