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外面使用.
相关推荐
Nebula_g9 分钟前
JavaSE加强:IO流
java·开发语言·windows·stream·javase
rannn_11117 分钟前
JVM 面试题:类加载过程详解(附高频考点)
java·jvm·后端
程序猿乐锅4 小时前
从0-1一文详解RabbitMQ
java·分布式·后端·中间件·rabbitmq·ruby
考虑考虑7 小时前
JDK26中的List.ofLazy()
java·后端·java ee
小蒜学长7 小时前
基于SpringBoot的公寓报修管理系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·公寓报修管理系统·多角色协同
Ada's8 小时前
【计算机基础系列】003:Python数据结构
开发语言·数据结构·python
云浪8 小时前
Go源码分析:搞懂 Go 是如何实现堆的
后端·go·源码阅读
2601_962885728 小时前
如何用 Python 计算 TRIX 三重指数平滑均线指标?
开发语言·python
还卿一钵无情泪9 小时前
Unsloth 微调 构建自己的大模型 没有GPU也能微调
linux·开发语言·人工智能·python·大模型·nlp·unsloth
倔强的石头10610 小时前
应用账号最小权限实践:读写账号、报表账号、运维账号分层
java·运维·开发语言