go 语言入门01

1. go 的应用领域:

  1. 区块链
  2. 服务器开发(游戏)
  3. 分布式计算,云服务计算

2. 一个新知识或技术的学习过程:

  1. 发现问题(新的需求)
  2. 使用传统方法进行解决(不能解决或存在问题时需要使用新的技术或方法来进行解决)
  3. 学习新技术的知识点,原理等
  4. 使用demo快速入门(进一步了解知知点,原理的使用)
  5. 讨论细节(1. 怎么使用更规范 2. 使用陷井 这些才体现一个程序员的水平)

3. 为什么要发明 go

  1. 硬件技术更新较快, 目前主流编程语言稍显滞后, 不能合理利用多核cpu的优势来提升软件系统性能
  2. 软件系统越来越复杂, 缺乏一个简单高效的编程语言(1. 风格不统一 2. 计算能力不够 3. 处理大并发不够好)
  3. 目前主流的编程语言不能同时兼顾开发效率与运行效率(通常脚本语言开发效率高但运行效率低, 而编译性语言开发效率低,但运行效率高)

4. go 的特点

  1. 从c中继承很多理念, 包括:表达式语法, 控制结构, 基础数据类型, 指针等
  2. 引入包的概念, 用于组织程序结构(go程序的每个文件,都要属于一个包, 否则编译不了)
  3. 引入垃圾回收
  4. 天然并发(1. 方言层面支持并发,实现简单 2. goroutine 轻量级线程, 可实现大并发处理, 高效利用多核 3. 基于 cps 并发模型实现)
  5. 吸收管道通讯机制, 形成go的channel
  6. 函数可以有多个返回值
  7. 新的创新:切片slice, 延时执行defer等

5. go 环境变量配置

  1. GOROOT 指定SDK安装目录
  2. PATH 添加SDK的bin目录
  3. GOPATH go项目的工作目录

6. go 开发注意事项

  1. 源文件以 .go 为后缀
  2. 程序执行入口为 main()
  3. 严格区分大小写
  4. 一行一条语句, 每条语句不需要加";"
  5. 定义的变量或import的包如果没有使用, 则编译不能通过
  6. “{” 不能独占一行, 必须写在方法名后, 或条件后

7. gofmt

  1. gofmt 源文件 // 格式化输出源文件
  2. gofmt -w 源文件 // 将源文件格式化

8. 变量使用

  1. 声明: var 变量 变量类型
  2. 一个变量声明后便具有了默认值, 如: int 类型的默认值为 0
  3. 变量类型可以自行推导, 如: var num = 10.11
  4. 变量声明可以省略 var, 如: name := “tom” 等价于 var name = “tom”
  5. 多变量声明, 如: var n1, n2, n3 int 或者 var n1, name = 1, “tom” 或者 n1, name := 1, “tom”
  6. 一次性声明多个全局变量:
    var(
    n1 = 1
    name = “tom”
    )
  7. 变量强类型

9. 数据类型

  1. 基本类型
    1. 数值
      1. 整数(int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, byte(0-255))
      2. 浮点(float32, float64)
    2. 字符(没有专门的字符型, 使用byte来保存单个字母字符)
    3. 布尔(bool)
    4. 字符串
    5. rune(int32的别名, 表示一个Unicode 码点)
    6. complex64, complex128
  2. 派生类型
    1. 指针
    2. 数组
    3. 结构体(struct 类似 class)
    4. 管道
    5. 函数
    6. 切片(slice 类似动态数组)
    7. 接口
    8. map

10. 查看变量占用字节大小和数据型

fmt.Println(“类型: %T 字节数: %d”, 变量, unsafe.Sizeof(变量))

11. 整型的使用细节

  1. 整型默认类型为 int
  2. int 和 uint 的大小和系统有关

12. 浮点数使用

  1. 浮点数 = 符号位 + 指数位 + 尾数位
  2. 尾数部分可能丢失, 造成精度损失; float64 比 float32 要准确
  3. 浮点型默认为 float64
  4. 浮点数科学计数法表示, 如: num := 5.1234e2 等价于 5.1234 * 10^2 等价于 512.34

13. 字符类型使用:

  1. 保存的字符在ASCII码表中存在, 可以直接保存到byte中
  2. 如果保存的码值大于255, 可以考虑使用int类型来保存
  3. 如果要输入字符,则需要用 %c
  4. 字符类型本质就是整数, 所以它可以进行运算, 如: n1 := 10 + ‘a’

14. 布尔类型使用:

  1. 只有true 和 false 两个值, 不能使用其它值(如:0, 1)进行替代

15. string 类型使用

  1. 统一使用utf-8编码, 乱码问题得到了很好解决
  2. 和java一样,字符串不可变
  3. 使用反引号, 使字符串以原生格式输出; 可以防止一些攻击
  4. 和java一样,用"+"来拼接字符串; 如果拼接时有换行, 则 “+” 只能出现在行尾而不能在行首

16. 基本数据类型相互转换:

  1. go 中的数据类型不能自动转换
  2. 转换示例:
    var a int32 = 10
    var b float32 = float32(a)

17. 基本类型与string类型转换:

  1. fmt.Sprintf("%参数", 表达式) //基本转string
    参数: d, c, f,
  2. strconv.ParseXXX(str) //string 转基本

18. 指针

  1. 应该叫:“指针变量”, 它的值是一个内存地址
    var a int = 10
    var p *int = &a
    p 指针的值就是 a 的地址

// 将 a 对应内存中内容改为 20
*p = 20

19. 值类型和引用类型

  1. 值类型(变量直接存储值, 内存在栈中分配): 基本数据类型, 数组, 结构体
  2. 引用类型(变量存储的是一个地址, 内存通常在堆中分配): 指针, 切片, map, 管道, interface

20. 访问权限

  1. 如果变量, 函数, 常量以大写字母开始, 则可以被其它包访问; 如果小写则只能被当前包访问

21. 获取屏幕输入:

package main
import "fmt"

func main(){
	fmt.Println("请输入姓名")
	var name string
	fmt.Scanln(&name)
	
	fmt.Println("请输入年龄")
	var age byte
	fmt.Scanln(&age)
	
	fmt.Println("是否喜欢编程")
	var like bool
	fmt.Scanln(&like)

	fmt.Println(name, " ", age, " ", like)
	
	
	fmt.Println("请依次输入: 姓名, 年龄, 是否喜欢编程; 用空格隔开")
	fmt.Scanf("%s %d %t", &name, &age, &like)
	fmt.Println(name, " ", age, " ", like)
}

22. 包

  1. 包名通常和所在文件夹名一致
  2. package 指令必须在文件的第一行
  3. import 时, 路径从$GOPATH的src下开始, 不用带src, 编译器会自动从src下开始引入
  4. 包中的函数首字母大小才能被别的包所使用, 访问语法: 包名.函数名
  5. 可以给名取别名, 取过别名后, 该文件中只能使用别名来访问

import{
	别名 "包名"
}
  1. 同一文件不能定义两个名字相同的函数或全局变量; 同一个包下不同的文件中也不能有两个相同名字的函数或全局变量
  2. 如果要编译成一个可执行文件, 需要将包名声明为main; main 包只能有一个
//编译一个go程序
1. 进入$GOPATH
2. go build -o bin/可执行文件名 要编译的项目的main包

你可能感兴趣的:(go 语言入门01)