首页 > 技术文章 > GO学习笔记(2)

tinghaiku 2020-08-03 18:15 原文

二. 数据类型

1. 内置类型:

  1.1. 值类型

    bool

    int(32/64)  int8  int16  int32  int64

    uint(32/64)  uint8  uint16  uint32  uint64

    float32  float64

    string

    complex64  complez128

    array

  1.2. 引用类型

    slice  切片

    map  映射

    chan  管道

2. 基本类型

  2.1. 整型

    有符号: int8  int16  int32  int64

    无符号:uint8  uint16  uint32  uint64

  2.2. 浮点型

    float32  float64

  2.3. 复数

    complex64  complex128

  2.4. 布尔值

    bool (GO语言不允许将整型强制转换为布尔类型)

  2.5. 字符串

    string (GO语言中字符串必须用双引号 ("")包裹,多行字符串可以用 反引号 (``))

  2.6. 转义符

    \r  回车

    \n  换行

    \t  制表符

  2.7. 字符类型 (字符用单引号 ('') 包裹)

    byte: 等同于uint8, 代表一个ASCII码字符

    rune:代表一个UTF-8字符

func traversalString()  {
    s := "Go学习笔记"
    for  i := 0; i < len(s); i++{        // 默认是 type类型
        fmt.Printf("%c",s[i])         // Goå­¦ä¹ ç¬ è®°
    }
    fmt.Println()
    for _, r := range s{                // 默认是rune类型
        fmt.Printf("%c",r)            // Go学习笔记
    }
}

  2.8. 数组

    2.8.1. 数组定义

func arrayDefine()  {
// 一. 一维数组
// 数组定义,未初始化的元素为类型默认值
var arr01 [5]int = [5]int{1,2,3}
fmt.Println(arr01) // [1 2 3 0 0]
// 定义时变量后的类型可省略
var arr02 = [5]int{2,3,4}
fmt.Println(arr02) // [2 3 4 0 0]
// 使用数组索引初始化
var arr03 = [5]int{1:1}
fmt.Println(arr03) // [0 1 0 0 0]
// 通过初始化数组的值确定数组长度
var arr04 = [...]int{1,2,3,4}
fmt.Println(arr04) // [1 2 3 4]
// 支持结构体数组
arr05 := [...]struct{
name string
age int
}{
{"zhangsan",33}, // 类型可省略
{"lisi",22}, // 每行都必须有逗号(,)
}
fmt.Println(arr05)

// 二. 多维数组
var arr001 = [2][3]int{{1,2,3},{5,6,7}}
fmt.Println(arr001) // [[1 2 3] [5 6 7]]

arr002 := [...][2]int{{1,2},{4,5},{7,9}} // 第二维不能用 ...
fmt.Println(arr002) // [[1 2] [4 5] [7 9]]

// ...只能在第一维用一次
//arr003 := [...][...][4]int{{{1,2,3,4},{1,2,3,4},{1,2,3,4}}} // 该行会报错: use of [...] array outside of array literal
//fmt.Println(arr003)
}

     2.8.2. 数组传参

package main

import "fmt"

func main() {
    arr1 := [...]int{1,2,3,4,5}
    arr2 := [...]int{1,2,3,4,5}
    printArr(&arr1,arr2)            // arr1传入数组地址    arr2传值
    fmt.Println("arr1",arr1)    // [10 2 3 4 5]
    fmt.Println("arr2",arr2)    // [1 2 3 4 5]
}
// 数组拷贝和传参
func printArr(arr1 *[5]int, arr2 [5]int) {
arr1[0] = 10
fmt.Println(*arr1) // [10 2 3 4 5]
arr2[0] = 10
fmt.Println(arr2) // [10 2 3 4 5]
}
 

 

推荐阅读