Go Lang中的数据类型

发布时间 2023-12-28 17:05:08作者: Terry841119
Go的数据类型可以分为,基础数据类型和派生数据类型
基础数据类型
  • 数值型(int,uint,float)
  • 字符型(bype)
  • 布尔型(bool)
  • 字符串(string)
派生类型
  • 指针
  • 数组
  • 结构体
  • 管道
  • 函数
  • 切片
  • 接口
  • map
基础类型的申明代码
    var i int=1;
    var s string="hello";
    var b bool = true;
    var bt byte=104;//对应字母 h
    fmt.Println("基础类型", i, s, b, bt)
    fmt.Println(string(bt))
    
    输出结果
    基础类型 1 hello true 104
    h
指针的申明及使用

    var strA,strB = "strA", "strB";
    fmt.Println("==================================== ") ;
    fmt.Println("strA = ", strA) ;
    fmt.Println("strB = ", strB) ;
    exchangeStr(strA,strB);

    
    fmt.Println("==== after exchangeStr ==== ") ;
    fmt.Println("strA = ", strA) ;
    fmt.Println("strB = ", strB) ;


    fmt.Println("strA = ", &strA) ;
    fmt.Println("strB = ", &strB) ;
    exchangeStr_point(&strA,&strB);

    fmt.Println("==== after exchangeStr_point ==== ") ;
    fmt.Println("strA = ", strA) ;
    fmt.Println("strB = ", strB) ;
    fmt.Println("==================================== ") ;


func exchangeStr(strA string,strB string){
    var strTemp string;
    strTemp=strA;
    strA=strB;
    strB=strTemp;
    
    fmt.Println("=========inside exchangeStr=========")
    fmt.Println("strA = ", strA) ;
    fmt.Println("strB = ", strB) ;
}

func exchangeStr_point(strA *string, strB *string){
    var strTemp string;
    strTemp=*strA;
    *strA=*strB;
    *strB=strTemp;
    
    fmt.Println("=========inside exchangeStr_point=========")
    fmt.Println("strA = ", *strA) ;
    fmt.Println("strB = ", *strB) ;
}

输出结果:
==================================== 
strA =  strA
strB =  strB
=========inside exchangeStr=========
strA =  strB
strB =  strA
==== after exchangeStr ====
strA =  strA
strB =  strB
strA =  0xc00001e070
strB =  0xc00001e080
=========inside exchangeStr_point=========
strA =  strB
strB =  strA
==== after exchangeStr_point ====
strA =  strB
strB =  strA
====================================
可以看到通过指针可以实现参数的值传递
 
数组
 
    var array [5]int
    var s string="hello";
    array[0] = 10
    array[1] = 20
    array[2] = 30
    array[3] = 40
    array[4] = 50
    fmt.Println("遍历array")
    for i := 0; i < len(array); i++ {
        fmt.Println(array[i])
    }

    fmt.Println("遍历string")
    for i := 0;i<len(s);i++ {
        //s[i]为bype类型,输出ASCII码
        fmt.Println(s[i]);
        fmt.Println(string(s[i]));
    }
    
结果:
遍历array
10
20
30
40
50
遍历string
104
h
101
e
108
l
108
l
111
o
通过代码可以看到,string和数组很想,之后可以看一下两个类型的底层结构
 
结构体
package main

import "fmt"

type Person struct {
  name string
  age int
  gender string
}

func main() {
  // 创建一个 Person 结构体实例
  p := Person{"John", 20, "male"}

  // 访问结构体实例的字段
  fmt.Println(p.name)
  fmt.Println(p.age)
  fmt.Println(p.gender)

  // 修改结构体实例的字段
  p.name = "Jane"
  p.age = 21
  p.gender = "female"

  // 再次访问结构体实例的字段
  fmt.Println(p.name)
  fmt.Println(p.age)
  fmt.Println(p.gender)
}
结果:
John
20
male
Jane
21
female
管道
    // 创建一个整数类型的管道
    ch := make(chan int)

    // 启动一个发送数据的 goroutine
    go func() {
        ch <- 42 // 将数据 42 发送到管道
        ch <- 43 // 将数据 43 发送到管道
    }()
    // go func() {
    //  ch <- 43 // 将数据 43 发送到管道
    // }()
    // 从管道中接收数据
    value := <-ch
    fmt.Println(value) // 输出 42
    value = <-ch
    fmt.Println(value) // 输出 43
日期
除了以上这些类型,一般我们常用的还有日期
可以发现,这里没有日期类型,Go Lang的日期被定义在系统函数里
    import(
    "fmt"
    "time"
)
    
    currentTime := time.Now();
    fmt.Println(currentTime);
    fmt.Printf("currentTime的类型 = %T", currentTime);

输出结果
2023-12-24 23:36:09.8925804 +0800 CST m=+0.005935301
currentTime的类型 = time.Time
其他数据类型在后续边摸索边使用