Golang学习

Golang学习

Go by Example 中文版
七日实现系列,适合小项目练手:
零神Go语言竞赛模板库
Gorm中文官方文档
redigo:golang redis 开源客户端
golang 分布式锁

Gorm

Gorm快速上手
Gorm入门

redis

官方文档
配置redis
redigo:golang redis 开源客户端
goredis文档
golang分布式锁

Gin

中文官方文档
Gin Web笔记--by七米老师
Gin练手小项目--ToDoList

资料

知识星球
golang-guide
项目实战

Golang的优势

极简单部署方式

-可直接编译成机器码

-不依赖其他库

-直接运行即可部署

静态类型语言

-编译的时候能够检查出隐藏的大多数问题

语言层面的并发

-天生的基因支持

-充分的利用多核

强大的标准库

-runtime系统调度机制

-高效的GC垃圾回收

-丰富的标准库

简单易学

-只有25个关键字

-C语言简洁基因,内嵌C语法支持

-面向对象特征(封装,继承,多态)

-跨平台

1 基本语法

1.0 Hello World

package main

import "fmt"

func main() {
   fmt.Println("Hello World")
}

注意,Golang中大括号的左括号必须不换行,否则会语法错误

1.1 变量的声明

var 变量名 变量类型
var age int

简短格式类型

我们可以使用:=来定义变量

比如:

i := 1

温馨提示:

  1. 定义变量,同时显式初始化
  2. 不能提供数据类型
  3. 只能用在函数(方法)内部

以下代码会报错

package main

func main() {

    var level int = 1
    // 再次声明并赋值 会报错 no new variables on left side of := (左边的变量已经被声明了,不能重复声明)
    level := 1
}

在多个短变量声明和赋值中,至少有一个新声明的变量出现在左值中(与顺序),即便其他变量名可能是重复声明的,编译器也不会报错

1.2 基本数据类型

bool 同C++,只有true和false两种值
string 字符串
int 整型
uint 无符号整数,uint8,uint16,uint32,uint64
byte 就是uint8
rune 类似于int32
float32、float64 浮点数
complex64、complex128 复数

声明变量时,如果不声明数据类型,系统会自动进行判断

var level = 1;

布尔型数据只有true和false,且不能参与任何计算以及类型转换

1.2.1 字符:

-ASCII 用byte存储

-UTF-8 用rune存储

var ch byte = 'A'
var c2 rune = '我'

1.2.2 字符串:

一经定义,一个不可改变的字节序列,字符串可以包含任意的数据,但是通常是用来包含可读的文本,字符串是 UTF-8字符的一个序列。 注意:字符串底层是byte数组

字符串长度 len(s)
字符串拼接 + / +=
访问字符串 ASCII 直接访问 s[0] 
         UTF-8 []rune(s)[0] //先转换成rune数组
字符串遍历
1.传统for循环
for i := 0; i < len(s); i++ {
   fmt.printf("%c", s[i]) 
}

2.for range遍历
for _, c := range s {
    fmt.printf("%c",c)
}

print : 结果写到标准输出
Sprint:结果会以字符串形式返回
Println:换行输出
Printf:按照指定格式输出

3.字符串转int
首先需要import "strconv"
a, _ := strconv.Atoi("123")
//这个函数有两个返回值,第二个返回值表示能否进行状态转换
fmt.Println(reflect.TypeOf(str))

4.int转字符串
str := strconv.Itoa(123)

5.判断字符串B是否在字符串A中出现过
首先需要import "strings"
strings.Contains(A,B)

6.统计B在A中出现的次数
strings.Count(A,B)

7.不区分大小写字符串比较
strings.EqualFold(A,B)

8.查询B在A中第一次出现的位置(相当于C++中的find)
strings.Index(A,B)
最后一次出现 stirngs.lastIndex(A,B)

9.字符串大小写转换表
strings.ToUpper(A)
strings.ToLower(B)

10.去除空格,去除左右指定字符
TrimSpace()
Trim()
TrimLeft()
TrimRight()

批量格式类型

var (
    a int
    b string
    c []float32
) 

1.3 作用域

  • 函数内定义的变量称为局部变量
  • 函数外定义的变量称为全局变量
  • 函数定义中的变量称为形式参数

全局变量声明必须以 var 关键字开头,如果想要在外部包中使用全局变量的首字母必须大写

1.4 标准输入输出

1.4.1 标准输入

需要import "fmt"

//通过空格或回车分隔参数(常用)
fmt.Scan(&a, &b)
//一行一行读取参数,通过空格分隔参数
fmt.Scanln(&a, &b)

//类比C语言scanf
fmt.Scanf("%d%d",&a, &b)

1.4.2 标准输出

//换行输出
fmt.Println()

fmt.Print()

//格式化输出
fmt.Printf()

%c  单一字符
%T  动态类型
%v  本来值的输出
%+v 字段名+值打印
%d  十进制打印数字
%p  指针,十六进制
%f  浮点数
%b 二进制
%s string

posted @ 2024-01-29 16:14  Showball  阅读(30)  评论(0编辑  收藏  举报