• 速战速决 go go 概述: 基本语法,nil


    速战速决 go https://github.com/webabcd/GoSample
    作者 webabcd

    速战速决 go - go 概述: 基本语法,nil

    示例如下:

    summary.go

    // go 概述 - 基本语法,nil
    // 注:
    // 1、go 是通过 GC 清理的
    // 2、go 是通过开头字母大小写来控制可见性的
    //    如果定义的常量、变量、类型、接口、接口中的方法,结构体、结构体中的成员、函数等的名称是大写字母开头,则表示能被其它包访问或调用,非大写字母开头就只能在包内使用
    
    package main
    
    import (
    	"fmt"
    	"math"
    )
    
    func summary() {
    	summary_sample1()
    	summary_sample2()
    }
    
    // 基本语法
    func summary_sample1() {
    
    	// 运算符 =, +=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=, ||, &&, |, ^, &, ==, !=, <, <=, >, >=, <<, >>, +, -, *, /, %, !, *, &, ++, --
    
    	// 变量的声明和初始化
    	var a int = 1
    	var b = 2           // 编译器推导类型
    	var c, d int = 3, 4 // c, d int 的意思是 c 和 d 都是 int 类型
    	var (
    		e int = 5
    		f     = 6
    	)
    
    	// 声明的简短格式(必须要初始化,必须要由编译器推导类型,只能在函数内部声明)
    	g := 7
    	h, i := 8, 9
    
    	// const 常量
    	const pi = math.Pi
    	// _ 表示匿名变量,后续是不可使用的,如果你使用这个变量则会报错
    	var _ int = 10
    
    	fmt.Println(a, b, c, d, e, f, g, h, i, pi) // 1 2 3 4 5 6 7 8 9 3.141592653589793
    
    	// 通过 {} 构造数组或切片或字典时,需要注意
    	// } 与最后一个元素在同一行时,最后一个元素后面不用加逗号
    	j := [3]int{1, 2, 3}
    	// } 与最后一个元素不在同一行时,最后一个元素后面要加逗号
    	k := [3]int{
    		1, 2, 3,
    	}
    	fmt.Println(j, k) // [1 2 3] [1 2 3]
    
    	l := &struct {
    		a int
    	}{}
    	// 虽然 l 是指针,需要这么 (*l).a = 123 使用,但是 go 是支持语法糖(syntactic sugar)技术的,他会自动转换的,所以你可以这么 l.a = 456 使用
    	(*l).a = 123
    	l.a = 456
    	fmt.Println(l) // &{456}
    }
    
    // nil
    func summary_sample2() {
    	// nil 和 nil 是不能做相等判断的,下面这句会编译时报错
    	// fmt.Println(nil == nil)
    
    	// 指针的默认值是 nil
    	var a *int
    	var b *int
    	var c *string
    	// 指针 a, b, c 本身的值都是 0x0
    	fmt.Printf("%p, %p, %p\n", a, b, c) // 0x0, 0x0, 0x0
    	// 判断指针是否为 nil 就用 == 即可
    	fmt.Println(a == nil, b == nil, c == nil) // true true true
    	// 指向相同类型的指针,如果他们都是 nil 则可以做相等判断(切片类型除外)
    	fmt.Println(a == b) // true
    
    	// 指向不同类型的指针,即使他们都是 nil 也不能做相等判断,下面这句会编译时报错
    	// fmt.Println(a == c)
    
    	var d []int
    	var e []int
    	// 可以通过 == 判断某一个切片是否为 nil
    	fmt.Println(d == nil, e == nil) // true true
    	// 但是因为切片类型是不能通过 == 做相等判断的,所以即使两个切片类型的指针都是 nil 也不能做相等判断,下面这句会编译时报错
    	// fmt.Println(d == e)
    }
    
    

    速战速决 go https://github.com/webabcd/GoSample
    作者 webabcd

  • 相关阅读:
    EasyUI的DataGrid 打印导出
    js 验证各种格式类型的正则表达式
    双机热备方案
    使用 IDEA 创建 Maven Web 项目 (异常) Disconnected from the target VM, address: '127.0.0.1:59770', transport: 'socket'
    MySQL 常用函数
    使用 IDEA 创建 Maven Web 项目 (四) 让 WEB 应用跑起来
    使用 IDEA 创建 Maven Web 项目 (二) 搭建 WEB 项目框架
    使用 IDEA 创建 Maven Web 项目 (三) 编写一个简单的 WEB 应用
    Android 开发环境 —— Eclipse 启动时报错:Error when loading the SDK
    使用 EasyUI 创建左侧导航菜单
  • 原文地址:https://www.cnblogs.com/webabcd/p/go_summary.html
Copyright © 2020-2023  润新知