【Go编程学习】数据类型、关键字、标识符

基本数据类型

  • 布尔类型:bool
  • 整型:byte int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr
  • 浮点型:float32 float64
  • 复数:complex64 complex128
  • 字符:rune
  • 字符串:string

布尔型

var ok bool
ok = true
//ok := true 短类型声明,编译器自动推断数据类型
//Go支持多个类型变量同时声明并赋值
//a,b := 1,true

布尔型数据和整型数据不能相互转换

不指定初始值默认为false

整型

byte是uint8的别名

不同类型的整型必须进行强制类型转换

var a int = 1
var b int32 = 2
b = a //error

浮点型

浮点数字面量被自动类型推断为float64类型

var b := 10.00 //10.00被认为是float64类型

两个浮点数不应该用==或!=比较(浮点数的表示和存储精度问题)

复数

complex64由两个float32构成,complex128由两个float64构成

var value1 complex64 = 3.1 + 5i
value2 := 3.1 + 6i

处理复数的内置函数:

var v = complex(2.1,3) //构造复数
a := real(v) //实部
b := image(v) //虚部

字符

Go 内置两种字符类型:

  • byte 等同于int8,常用来处理ascii字符

  • rune 等同于int32,常用来处理unicode或utf-8字符

字符串

字符串是常量,可以通过索引访问字节单元,但不能修改字节的值

字符串尾部不包含NULL字符

对字符串切片操作返回子串依然是字符串,基于字符串创建的切片和原字符串指向相同的底层字符数组

字符串可以转换为字节数组,也可以转换为Unicode 的字数组

a := "hello,世界"
b := []byte{
    
    a}
c := []rune{
    
    a}

复合数据类型

指针

指针声明类型为*T,支持多级指针**T,变量名前加&获取地址

使用示例:

package main

import "fmt"

func main() {
    
    
   var a int = 20   /* 声明实际变量 */
   var ip *int      /* 声明指针变量 */

   ip = &a  /* 指针变量的存储地址 */

   fmt.Printf("a 变量的地址是: %x\n", &a)

   /* 指针变量的存储地址 */
   fmt.Printf("ip 变量储存的指针地址: %x\n", ip)

   /* 使用指针访问值 */
   fmt.Printf("*ip 变量的值: %d\n", *ip)
}

结构体指针访问结构体字段依然使用点操作符

数组

使用示例:

var balance = [5]float32{
    
    1000.0, 2.0, 3.4, 7.0, 50.0}
var balance = [...]float32{
    
    1000.0, 2.0, 3.4, 7.0, 50.0}//忽略大小,根据元素个数自动设置数组大小

数组长度也是数组类型的一部分,[10]int和[20]int表示不同的类型

切片

一种变长数组,数据结构中有指向数组的指针,所以是引用类型

切片创建

var arr = [...]int{
    
    0,1,2,3,4,5,6}
a1 := arr[0:4] //[0 1 2 3]
a2 := arr[:4]  //[0 1 2 3]
a3 := arr[2:]  //[2 3 4 5 6]

a: = make([]int , 10) //len=10,capacity=10
b := make([]int,10,15) //len=10,cap=15

切片操作:

  • len()返回长度
  • cap()返回底层数组容量
  • append()追加元素
  • copy()复制切片

字典

创建使用示例:

package main

import "fmt"

func main() {
    
    
    var countryCapitalMap map[string]string /*创建集合 */
    countryCapitalMap = make(map[string]string)

    /* map插入key - value对,各个国家对应的首都 */
    countryCapitalMap [ "France" ] = "巴黎"
    countryCapitalMap [ "Italy" ] = "罗马"
    countryCapitalMap [ "Japan" ] = "东京"
    countryCapitalMap [ "India " ] = "新德里"

    /*使用键输出地图值 */
    for country := range countryCapitalMap {
    
    
        fmt.Println(country, "首都是", countryCapitalMap [country])
    }

    /*查看元素在集合中是否存在 */
    capital, ok := countryCapitalMap [ "American" ] /*如果确定是真实的,则存在,否则不存在 */
    /*fmt.Println(capital) */
    /*fmt.Println(ok) */
    if (ok) {
    
    
        fmt.Println("American 的首都是", capital)
    } else {
    
    
        fmt.Println("American 的首都不存在")
    }
}

结构体

创建使用示例:

package main

import "fmt"

type Books struct {
    
    
   title string
   author string
   subject string
   book_id int
}


func main() {
    
    

    // 创建一个新的结构体
    fmt.Println(Books{
    
    "Go 语言", "www.runoob.com", "Go 语言教程", 6495407})

    // 也可以使用 key => value 格式
    fmt.Println(Books{
    
    title: "Go 语言", author: "www.runoob.com", subject: "Go 语言教程", book_id: 6495407})

    // 忽略的字段为 0 或 空
   fmt.Println(Books{
    
    title: "Go 语言", author: "www.runoob.com"})
}

通道

接口

关键字

25个关键字

break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var

36个预定义标识符

append bool byte cap close complex complex64 complex128 uint16 copy false float32 float64 imag int int8 int16 uint32 int32 int64 iota len make new nil panic uint64 print println real recover string true uint uint8 uintptr

标识符

标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(A~ Z和a~ z)数字(0~9)、下划线“_”组成的序列,但是第一个字符必须是字母或下划线而不能是数字

参考

猜你喜欢

转载自blog.csdn.net/i0o0iW/article/details/111232629
今日推荐