• Go_声明是否为nil


    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    
    	//基本数据类型(默认值)
    	//如果是java,报错,变量未初始化
    	var a int
    	fmt.Println(a) //0
    	a = 100
    	fmt.Println(a) //100
    
    	//数组(零)
    	//数组是数据结构
    	var arr [5]int
    	fmt.Println(arr) //[0 0 0 0 0]
    	arr[0] = 1000
    	fmt.Println(arr) //[1000 0 0 0 0]
    
    	//切片(空)
    	//切片是数据结构
    	var slice []int
    	fmt.Println(slice) //[] //没有初始化,它也是有底层数组的
    	//slice[0] = 100 //runtime error: index out of range [0] with length 0
    	fmt.Println(slice)
    	slice = []int{1, 2, 3, 4, 5}
    	fmt.Println(slice) //[1 2 3 4 5]
    
    	//结构体(默认值)
    	type Student struct{
    		Name string
    		Age int
    	}
    	var s Student
    	fmt.Println("s-->", s) //s--> { 0}
    
    	//map(nil)
    	var map1 map[int]int
    	fmt.Println(map1) //map[]
    	//map1[10] = 100 //panic: assignment to entry in nil map
    	//fmt.Println(map1)
    	map2 := make(map[int]int)
    	fmt.Println(map2) //map[]
    	map2[100] = 1000
    	fmt.Println(map2)  //map[100:1000]
    	i, ok := map2[100] //这个OK也可以不写
    	fmt.Println(i, ok)
    
    	//管道(nil)
    	var c chan int
    	fmt.Println(c) //<nil>
    	c2 := make(chan int)
    	fmt.Println(c2) //0xc000054060
    	go func() { //不能写在写数据的下面,会发生deadlock,必须有先有消费者,才有生产者
    		for n := 0; n < 10; n++ {
    			//i := <-c2
    			//fmt.Println(i)
    			v, ok := <-c2 //OK可以不写
    			fmt.Println(v, ok)
    		}
    	}()
    	for n := 0; n < 10; n++ {
    		c2 <- n
    	}
    
    }
    package main
    
    import "fmt"
    
    func main() {
    
    	// 不初始化为nil的
    
    	// 引用类型,初始化才能使用
    	// make用于给引用类型分配空间,slice map chan
    
    	// 1. 空接口类型
    	type a interface{}
    	var i a        // 不知道是什么类型实现的空接口,所以是nil
    	fmt.Println(i) // <nil>
    
    	// 2. 指针
    	var p *int     // 只分配了p的空间,并没有分配到存数据的地址,所以是nil
    	fmt.Println(p) // <nil>
    
    	// 2.1 slice // 有底层数组,长度为0
    	var s []int
    	fmt.Println(s)
    	s = append(s, 10)
    	fmt.Println(s) // [10]
    	// 长度为0的数组
    	var aa [0]int
    	fmt.Println("-->", aa)
    	fmt.Println(len(aa)) // 0
    	fmt.Printf("%T
    ", aa) // [0]int
    
    	// 3. map
    	var m map[int]int // map[int]int 引用类型,没有分配存数据的地址,所以是nil
    	fmt.Println(m)    // map[]
    	//m[10] = 100 // assignment to entry in nil map
    
    	// 4. chan
    	var c chan int // chan int 引用类型,没有分配存数据的地址,所以是nil
    	fmt.Println(c) // <nil>
    }
    
  • 相关阅读:
    秋招结束了
    面向萌新的日麻面麻规则简化/改进
    DataTable 转换为Tree 树状结构
    jmeter beanshell断言
    jmeter请求参数包含中文
    Centos7 yum缓存rpm安装包
    nginx针对某个url限制ip访问,常用于后台访问限制
    有关json-lib2.4在转java对象时超过7位数的Double类型会出现科学计数法和精度丢失的问题
    SAP 下载安装
    android okhttp + retrofit使用
  • 原文地址:https://www.cnblogs.com/yzg-14/p/12364950.html
Copyright © 2020-2023  润新知