Go语言入门之基础语法

Go语言入门之基础语法

1.简单语法概述

  • 行分隔符:

    一行代表一个语句结束,无需写分号。将多个语句写在一行可以用分号分隔,但是不推荐

  • 注释:

    // 或者/* */

  • 标识符:

    用来命名变量、类型等程序实体。

    支持大小写字母、数字、下划线,第一个字符必须是字母或下划线

    不支持数字开头,自定义go语言中的关键词和运算符作为标识符

  • 字符串连接:

    通过+号实现

  • 空格:

    尽量多使用空格保证代码的美观性和可读性

2.关键字与标识符

  • 25个关键字或保留字:

  • 36个预定义标识符:

3.运算符

(1)算数运算符

就是简单的+,-,*,/

(2)关系运算符

  • ==:两边相等则返回 true,否则false
  • !=:两边不相等则返回 true,否则false
  • >:左大于右则返回 true,否则false
  • <:右大于左则返回 true,否则false
  • >=:右大于等于左则返回 true,否则false
  • <=:做大于等于右则返回 true,否则false

(3)逻辑运算符

  • &&:AND运算,两边都是 true 则为 true 否则为 false
  • ||:OR运算,两边只要有一个true 则为 true 否则为 false
  • !: NOT运算,取反,条件为true 则为 false`

(4)位运算符

  • &,按位与,二进制都为1则为1,否则为0
  • |,按位或,二进制位有一个为 1 则为 1 否则为 0
  • ^,按位异或,二进制位不一样就为 1 否则为 0
  • <<,左移,左移 n 为就是乘以 2 的 n 次方
  • >>,右移,右移n位就是除以2的n次方

4.格式化字符串

Go语言中使用 fmt.Sprintf或 fmt.Printf 格式化字符串并赋值给新串

  • Sprintf :根据格式化参数生成格式化的字符串并返回该字符串。
  • Printf :根据格式化参数生成格式化的字符串并写入标准输出。

区别实例:

go 复制代码
var age = 17
var name = "go"
var url = "名字是%s&年龄是%d"
var target_url = fmt.Sprintf(url,name,age)  // 生成一个新的字符串
fmt.Println(target_url)                     // 输出新串

fmt.Printf(url,name,age)   // 直接输出

5.常见的转义字符

go 复制代码
\n:     // 换行符
\r:     // 回车符
\t:     // tab 键
\u:     // Unicode 字符
\U:     // Unicode 字符
\\:     // 反斜杠自身
``:     // 内容原样输出

6.变化多端的占位符

(1)普通占位符

go 复制代码
%v        // 相应值的默认格式      
%+v       // 打印结构体时会添加字段名     
%#v       // 打印结构体时会添加字段名和结构体名 
%T        // 打印出该数据的数据类型       	
%%        // 打印出一个百分号

(2)布尔占位符

go 复制代码
%t      // 布尔占位符,只能打印true和false

(3)整型占位符

go 复制代码
%d      // 十进制输出
%5d     // 设置宽度,效果类似于空格,前空5格为5d,后空为-5d,空换位0为05d

// 例子
fmt.Printf("|%5d|%-5d|%05d|", 1, 1, 1)  // 输入
|    1|1    |00001|                     // 输出

%b      // 二进制输出                             
%o      // 八进制输出 %#o输出的是以0开头的                            
%x      // 十六进制输出,字母形式为小写 a-f     %#x输出以0x开头     
%X      // 十六进制输出,字母形式为大写 A-F     %#X输出以0X开头 

(4)浮点型占位符

go 复制代码
%b        // 浮点数转化为 2 的幂的科学计数法 输入 1.23,输出 5539427541665710p-52
%e        // 科学计数法           输入1.23          输出 1.230000e+00
%E        // 科学计数法           输入1.23          输出 1.230000E+00     
%f        // 浮点数输出(保留6位)  输入1.23          输出 1.230000
%.1f      // 保留1位小数四舍五入   输入1.234         输出  1.2
%8f       // 保留8个数           输入1.123456789   输出  1.123457
%4.3f     // 3精度,保留5个数     输入12.12345      输出  12.123
%5.2f     // 2精度,保留4个数     输入12.1234       输出  12.12
%5.2f     // 2精度,保留6个数     输入1234.1234     输出  1234.12
                                           

%g      // 去掉小数后面的0              输入  12.1200    输出  12.12
%.3g    // 保留3位数后去小数后0          输入  12.1200    输出  12.12
%.5g    // 保留5位数后去小数后0          输入  12.300     输出  12.3

%G      // 官网说和g有区别,但是测试结果相同,应该适用于特殊情况浮点型占位符

(5)字符占位符

go 复制代码
%c      // 相应Unicode码点所表示的字符
%q      // 输出有单引号的相应Unicode码点所表示的字符
%U      // 输出格式为 U+hhhh 的字符串  %#U时多加了一个对应的字符  例:U+7583 '疃'

(6)字符串与字节切片

go 复制代码
%s      // 输出字符串表示(string类型或[]byte)

        // 截断字符串  
        fmt.Printf("%.3s", "abcde")
        // 输出
        abc


%q      // 安全转义,和上面的一样,就多了个双引号

        // 例子输入
        fmt.Printf("%s %q \n", "你", []byte("好"))
        // 输出
        你 "好" 

%x      // 转化为十六进制输出,小写字母       
%X      // 转化为十六进制输出,大写字母

(7) 指针占位符

go 复制代码
%p         // 十六进制表示,%p 带 0x, %#p 不带

// 输入
    a := 1
	b := []int{1, 2}
	fmt.Printf("%p|%#p", &a, b)
// 输出
0xc00000a0c8|c00000a100

(8) 其他占位符

go 复制代码
+         //打印数值的正负号,默认输出 ASCII 编码字符,非 ASCII 编码会转成 Unicode 编码输出
          // 输入
          fmt.Printf("%+d|%+q", -1, "你好")
          // 输出
          -1|"\u4f60\u597d"

-          // 会在右侧填充空格,上面已展示过
#          // 上面用过很多次,%#q 可以打印出反引号包裹的字符串
空格        // 输出时可以留出空位 5d%等于5个空格加d

占位符不用全看,看几个重要的就行,按需取用,都是来自网上整理,如有问题请留言。

相关推荐
利威尔xu7 小时前
Go IM 源码实战(14):本地缓存快 3000 倍,失效却难 10 倍
后端·缓存·微服务·面试·golang
利威尔xu9 小时前
Go IM 源码实战(13):30 个会话只有 2 个红点,未读数错在三条路径
redis·后端·微服务·面试·golang
FungLeo9 小时前
成为全栈·Go 后端篇·从 Node SQLite 到 PostgreSQL:把迁移做成独立交付物
postgresql·golang·sqlite·go·数据库迁移·成为全栈
皓月盈江15 小时前
GO使用Gin框架实现模板定义、解析与渲染
linux·golang·go·gin·定义模板·解析模板·渲染模板
利威尔xu15 小时前
万字详解|Go 进阶(五):sync 包底层:Mutex 自旋 4 次转饥饿,WaitGroup 漏 1 个 Done 挂起 3000 goroutine
后端·golang·并发编程·源码分析·sync
日日大王学编程17 小时前
AI 时代后端方向新人的未来规划与看法
人工智能·后端·python·ai·golang
FungLeo17 小时前
成为全栈·Go 后端篇·Go 后端怎么测试:从成功响应到故障后置状态
golang·集成测试·差分测试·成为全栈·后端测试·数据库测试
Sw1zzle17 小时前
Go入门(零):Linux Ubuntu 22.04 安装 Go
linux·ubuntu·golang
码剑客18 小时前
Gin+GORM+Redis 项目开发常见性能坑汇总(Go后端避坑指南)
redis·后端·golang·gin
FungLeo19 小时前
成为全栈·Go 后端篇·换后端不改前端:四个客户端如何做兼容回归
flutter·golang·go·成为全栈·兼容测试·taro 小程序