go从0到1项目实战体系一:go语言基础

复制代码
①. 所有go源码以.go结尾.
②. golang可执行程序,package main有且只有一个main入口函数.
③. 两种注释:单行注释//和多行注释/* */

1. 变量命名:

复制代码
①. 标识符以字母或下划线开头,大小写敏感
   以数字开头、含有特殊符号不行.
②. _是特殊标识符,用来忽略结果
③. 保留关键字

2. import方式:

复制代码
①. import("fmt")
②. import {
     "fmt"
   }

4. 常量:

复制代码
①. 常量使用const修饰,代表永远是只读的,不能修改.即在编译的时候就已经确定了.
②. const只能修饰boolean、number(int相关类型、浮点类型、complex)和string.
③. 语法:
   const identifier [type] = value        // 其中type可以省略
④. 举例:
   const b string = "hello world"
   const b = "hello world"       // 不写type在编译时,会自动推导类型
   const b = 9/3                 // 在编译时,会自动计算值
   const c = getValue()          // 错误的,因为函数只有在运行时,才会知道返回值
⑤. 比较优雅的写法:
   const (
     a = 0
     b = 1
     c = 2
   )
⑥. 更加专业的写法:
   const (
     a = iota     // 这个会下面会自动+1
     b            // 值为1
     c            // 值为2
   )

5. 变量:

复制代码
①. 语法:
   var identifier type
②. 举例:
   var a int
   var d int = 8
   Var (
     a int                 // 默认为0
     b string              // 默认为""
     c bool                // 默认为false
     d int = 8
     e = "hello world"     // 可以不写type类型
   )

5.1 值类型和引用类型:

复制代码
①. 值类型:
   a. 变量直接存储值,内存通常在栈中分配.
   b. 基本数据类型:
      int、float、bool、string以及数组和struct
   c. var i = 5        // i ---> 内存中的值

②. 引用类型:
   a. 变量存储的是一个地址,这个地址存储最终的值.
   b. 内存通常在堆上分配,通过GC回收.
   c. 传指针效率高,如果传一个很大的结构体,效率就不高了.
   d. 引用类型:
      指针、slice(切片)、map、chan等都是引用类型.
   e. var i = 5       // ref i ---> 地址(指针) --->  内存中的值
   f. &、*的运用:
      add(&a)
      func add(int *a) {
         return *a + 1       // *a表示取这个内存地址对应的值,只是a表示内存地址
      }

③. 总结:
   a. 在函数体中,如果修改传过来的值类型,外面的值不会变化.因为是复制了一份值进去.如果是修改引用类型,因为指针指向同一个变量,所以会影响外面的值.

(1). 举例:

go 复制代码
func main() {
	fmt.Println(calc.Age)
	a := 10
	b := 20
	swap(&a, &b);
	fmt.Println(a);                  // 10
	fmt.Println(b);                  // 20
}
func swap(a *int, b *int) {         // 这里是交换拷贝值的内存地址,不影响外面
	temp := a
	a = b
	b = temp
	fmt.Println("swap a:", *a);      // 20
	fmt.Println("swap b:", *b);      // 10
}

注:
①. 不管值类型是传递值还是内存地址,都是重新拷贝一份.

5.2 变量的作用域:

复制代码
①. 局部变量:
   a. 在函数内部声明的变量.
   b. 生命周期仅限于函数内部,出了这个函数,变量就销毁了.
②. 全局变量:
   a. 在函数外部声明的变量.
   b. 生命周期作用于整个包,如果是大写的,则作用于整个程序.
   c. 在语义块{}中,也有作用域.如for循环中声明的变量,不能在for外面使用.
相关推荐
你看我名字5 小时前
云计算工程师技能树:从 Linux 基础到云平台架构能力
linux·架构·云计算
棣廷5 小时前
初识Spark Core
大数据·分布式·spark
懂点Tech12 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
云和数据.ChenGuang12 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
美狐美颜SDK开放平台13 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
dtq042413 小时前
C++小案例 - 日志实战
开发语言·c++
星夜离尘5613 小时前
MATLAB ADC 码流触顶诊断:命中数、缺口分段与削顶不可辨识性
开发语言·matlab
凯凯姜13 小时前
分布式锁场景问题
分布式
码匠许师傅14 小时前
【C++三方组件】Qt 概览:桌面 C++ 的事实标准与许可证三轨
开发语言·c++·qt
Cosolar14 小时前
不收费、不加水印、数据归你:我做了个开源的在线简历工具
后端·面试·前端框架