Go语言数据类型

Go语言数据类型

1.1 整形与字符串之间的转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 同类型之间可以进行相加
var v1 int8 = 10
var v2 int16 = 8
v3 := int16(v1) + v2
fmt.Println(v3)
fmt.Println(v3, reflect.TypeOf(v3))

// 整形与字符串之间的转换
v5 := 19
var v4 int = 19
res := strconv.Itoa(v5)
fmt.Println(v4, reflect.TypeOf(res))

// 字符串转换为整形
v6 := "shuke"
result, err := strconv.Atoi(v6)
if err == nil {
fmt.Println("转换成功!", result)
} else {
fmt.Println("转换失败!")
}

1.2常见数学运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package main

import (
"fmt"
"math"
)

func main() {
fmt.Println(math.Abs(-10)) // 取绝对值
fmt.Println(math.Floor(3.14)) // 向下取整
fmt.Println(math.Ceil(3.14)) // 向下取整
fmt.Println(math.Round(3.34789)) // 就近取整
fmt.Println(math.Round(3.34789*100) / 100) // 保留小数点后两位
fmt.Println(math.Mod(11, 3)) // 取余数, 同 11 % 3
fmt.Println(math.Pow(2, 5)) // 计算次方,如 2 的5次方
fmt.Println(math.Pow10(2)) // 计算10次方,如 2 的10次方
fmt.Println(math.Max(1, 2)) // 两个值, 取较大值
fmt.Println(math.Min(1, 2)) // 两个值, 取较小值
}

10
3
4
3
3.35
2
32
100
2
1

1.3 指针

nil 使用new关键字进行变量声明

1
2
3
4
5
6
7
8
9
10
// 声明一个变量
var v1 int
v1 = 99
v2 := 88
fmt.Println(v1, v2)

// 指针
var v3 *int // <nil>
v4 := new(int) // 0xc00001c0d0 -> 初始值为0
fmt.Println(v3, v4)
  • new关键字创建内存并进行内部数据的初始化,并返回一个指针类型。
  • nil nil在go语言中表示空值。

1.4 超大整形

1
2
3
4
5
6
7
8
9
10
11
var s1 big.Int
// 在超大整形的对象中写入一些值
s1.SetInt64(2020)
s1.SetString("9082173189999999999999", 10)

fmt.Println(s1)

s3 := new(big.Int) // 初始化一块内存地址
s3.SetInt64(2022)
fmt.Println(s3)
使用new初始化方式效率更好,直接开辟内存空间。
  • 超大整形相加

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    // 超大整形值相加
    // 方式一
    n1 := new(big.Int)
    n1.SetInt64(10)

    n2 := new(big.Int)
    n2.SetInt64(20)

    res := new(big.Int)
    res.Add(n1, n2)
    fmt.Println(res)

    // 方式二:
    n1 := big.NewInt(10)
    n2 := big.NewInt(20)

    res := new(big.Int)
    // 加
    res.Add(n1, n2)
    // 减
    res.Sub(n1, n2)
    // 乘
    res.Mul(n1, n2)
    // 除
    res.Div(n1, n2)

    fmt.Println(res)

    fmt.Println(res.Int64(), res.String()) // 转成int和string
  • 超大整形相加示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       h1 := new(big.Int)
    h1.SetString("918293481248912748231747823", 10)

    h2 := new(big.Int)
    h2.SetString("1203129834124782374892", 10)

    result := new(big.Int)
    result.Add(h1, n2)
    fmt.Println(result.String())
    // 918293481248912748231747843
  • 注意点

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    h1 := new(big.Int)
    h1.SetString("918293481248912748231747823", 10)

    h2 := new(big.Int)
    h2.SetString("1203129834124782374892", 10)

    result := new(big.Int)
    result.Add(h1, n2)
    fmt.Println(result.String())
    // 918293481248912748231747843

索引切片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package main

import "fmt"

func main() {
name := "shuke"

// 索引获取字节
v1 := name[0]
fmt.Println(v1) // 115

// 获取切片区间字节
v2 := name[0:3]
fmt.Println(v2) // shu

// 循环所有字符
for index, item := range name {
fmt.Println(index, item, string(item))
}
/*
0 115 s
1 104 h
2 117 u
3 107 k
4 101 e

*/
// 获取字节
for i := 0; i < len(name); i++ {
fmt.Println(i, name[i])
}
/*
0 115
1 104
2 117
3 107
4 101
*/

// 转成rune集合
dataList := []rune(name)
fmt.Println(dataList[0], string(dataList[0])) // 145 s
}

数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
name1 := [2]string{"shuke", "jack"}
name2 := name1
name1[0] = "eric"
fmt.Println(name1, name2)
// [eric jack] [shuke jack]

// 数组嵌套 [ [0,0,0],[1,1,1] ]
var nesData [3][2]int
fmt.Println(nesData) // [[0 0] [0 0] [0 0]]
nesData[0] = [2]int{0,1}
nesData[1] = [2]int{2,3}
nesData[2] = [2]int{4,5}
nesData[1][1] = 999
fmt.Println(nesData) // [[0 1] [2 999] [4 5]]

nesData "= [2][3]int{[3]int{1,2,3}, [3]int{44,55,66}}
fmt.Println(nesData)

本文标题:Go语言数据类型

文章作者:shuke

发布时间:2020年06月20日 - 00:06

最后更新:2020年06月20日 - 17:06

原始链接:https://shuke163.github.io/2020/06/20/Go%E8%AF%AD%E8%A8%80%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------

本文标题:Go语言数据类型

文章作者:shuke

发布时间:2020年06月20日 - 00:06

最后更新:2020年06月20日 - 17:06

原始链接:https://shuke163.github.io/2020/06/20/Go%E8%AF%AD%E8%A8%80%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%