iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Golang易错知识点汇总
  • 308
分享到

Golang易错知识点汇总

2024-04-02 19:04:59 308人浏览 独家记忆
摘要

目录类型转换和类型断言1.类型转换示例代码2.类型断言代码示例全局变量全局变量使用var,编译通过全局变量不使用var,编译不通过init函数Go接口总结Go字符串如何修改字符串的内

类型转换和类型断言

类型转换语法:Type(expression)

类型断言语法为:expression.(Type)

1.类型转换示例代码

package main

import "fmt"

//典型的类型转换示例
func main() {
   // 类型转换示例
   var a int = 5
   var b int = 2
   var c float32
   c = float32(a) / float32(b) //这里就是典型的类型转换
   fmt.Printf("a的类型:%T\n", a)
   fmt.Printf("b的类型:%T\n", b)
   fmt.Printf("c的类型:%T\n", c)
   fmt.Printf("c的值:%v\n", c)
   //如果我们不进行类型转换,看下输出结果
   fmt.Printf("不进行类型转换的输出结果:%v\n", a/b) //从结果可以看出值为2,丢失了精度
}

打印结果

2.类型断言代码示例

注意:对于类型断言,expression 必须是接口类型

package main

import "fmt"

//经典的类型断言示例 搭配switch使用
func main() {
   var x interface{}
   x = 1
   switch x.(type) { //这就是上面说的expression.(Type)
   case float32:
      fmt.Println("类型是:float32")
   case string:
      fmt.Println("类型是:string")
   case int:
      fmt.Println("类型是:int")
   default:
      fmt.Println("未知类型")
   }
}

运行结果

全局变量

定义全局变量必须用var,全局变量要定义在函数之外,而在函数之外定义的变量只能用var定义。

全局变量使用var,编译通过

全局变量不使用var,编译不通过

init函数

这是官方对于init()函数的介绍:

变量除了可以在全局声明中初始化,也可以在 init ()函数中初始化。这是一类非常特殊的函数,它不能够被人为调用,而是在每个包完成初始化后自动执行,并且执行优先级比 main 函数高。 初始化总是以单线程执行,并且按照包的依赖关系顺序执行。 一个可能的用途是在开始执行程序之前对数据进行检验或修复,以保证程序状态的正确性。

如何觉得上面这一大段话不好理解的话,可以看我的总结:

  • init函数可以在任何包中有0个、1个或多个;
  • main函数只能在main包中有且只有一个,但是main包中也可以有0个、1个或多个init函数;
  • init函数和main函数都不能被显式调用;

Go语言中变量、init函数、main函数的执行顺序

  • 首先初始化导入包的变量和常量
  • 然后执行导入包的init函数
  • 然后初始化本包的变量和常量
  • 然后执行本包的init函数
  • 最后执行本包的main函数

Go接口总结

这是我在刷题的时候碰到的,总结出来给大家:

  • 如果两个接口拥有相同方法列表(顺序可以不一致),那么这两个接口实质上同一个接口
  • 接口A是接口B的子集,意味着A的方法B中都有,那么A是B的基类,所以A=B是可行的
  • 接口是否能够调用成功,需要运行的时候才能知道
  • 接口赋值是否可行,在编译阶段就可以知道

Go字符串

Go语言中的字符串不支持下标操作

在go语言中,字符串是一种基本类型,和其它开发语言不同,Go的字符串是由单个字节连接起来的。

Go语言统一使用utf-8编码标识Unicode文本。当字符为ASCII编码时,占用1个字节,其它字符占用2到4个字节,中文占用3个字节

如何修改字符串的内容

有三种方法:

  • 将字符串转成byte切片,再根据下标替换内容
  • 将字符串转为rune切片,再根据下标替换内容
  • 使用原生包 strings 中的 Replace() 方法

示例代码

package main

import (
   "fmt"
   "strings"
)

func main() {
   //第一种方法 将字符串转成byte切片
   s := "hello"
   s2 := []byte(s)
   s2[0] = 'x'
   fmt.Printf("转成byte切片:%v\n", string(s2)) //打印结果:转成byte切片:xello

   // 第二种方法 将字符串转为rune切片
   s3 := "王中阳"
   s4 := []rune(s3) //注意:中文字符串要进行修改,只能转成rune切片,不能转成byte切片
   s4[0] = '杨'
   fmt.Printf("转成rune切片:%v\n", string(s4)) //打印结果:转成rune切片:杨中阳

   // 第三种方法,使用原生包strings 中的 Replace() 方法
   s5 := "abcdef"
   old := "abc"
   newString := "ABC"
   s6 := strings.Replace(s5, old, newString, -1) //最后一个参数n的作用是:返回将s5中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换所有old子串。
   fmt.Printf("strings替换之后的:%v\n", s6)           //打印结果:strings替换之后的:ABCdef
}

运行结果

slice

slice可以通过append方式实现元素的删除。

**切片使用冒号分隔时遵循"前闭后开"原则,即包括前面的值,不包括后面的值。 **

1.删除单个元素

package main

import "fmt"

//使用append 删除单个元素
func main() {
   var data = []int{0, 1, 2, 3, 4, 5}
   //删除元素2
   index := 2
   //切片使用冒号分隔时遵循"前闭后开"原则,即包括前面的值,不包括后面的值。
   data1 := append(data[:index], data[index+1:]...)
   fmt.Println(data1)
}

运行结果

2.删除多个元素

package main

import "fmt"

//使用append 删除多个元素
func main() {
   var data = []int{0, 1, 2, 3, 4, 5}
   //删除元素0,1,2
   index := 2
   //切片使用冒号分隔时遵循"前闭后开"原则,即包括前面的值,不包括后面的值。
   data1 := append(data[:0], data[index+1:]...)
   fmt.Println(data1)
}

运行结果

总结

这篇文章汇总了我再开发和刷面试题过程中遇到的容易搞错的知识点,包括:

  • 类型转换和类型断言的对比
  • 定义全局变量只能用var,定义全局变量也可以定义在init()函数中
  • init()函数的知识点,以及init函数和main函数的执行顺序:先执行引用包的常量和变量、在执行引用包的init函数、再执行本包的常量和变量、再执行本包的init函数、最后才会执行本包的main函数。
  • Go接口的概念总结,刷面试题的时候可能碰到咬文嚼字的问题,注意避坑。
  • Go字符串不能通过下标直接修改内容,但是可以通过转成byte[]/rune[]/以及使用原生包strings中的Replace()方法修改内容
  • Go中的slice不能像map一样直接使用delete()方法删除元素,可以使用append()方法+冒号分隔切片的方式,间接实现切片元素的删除。

到此这篇关于golang易错知识点汇总的文章就介绍到这了,更多相关Golang知识点内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Golang易错知识点汇总

本文链接: https://www.lsjlt.com/news/121153.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Golang易错知识点汇总
    目录类型转换和类型断言1.类型转换示例代码2.类型断言代码示例全局变量全局变量使用var,编译通过全局变量不使用var,编译不通过init函数Go接口总结Go字符串如何修改字符串的内...
    99+
    2024-04-02
  • js重点知识汇总
    这篇文章主要讲解了“js重点知识汇总”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“js重点知识汇总”吧!1、几种数据类型,哪些是值类型,哪些是引用类型数据类...
    99+
    2024-04-02
  • Pandas-DataFrame知识点汇总
    目录1、DataFrame的创建根据字典创建读取文件2、DataFrame轴的概念3、DataFrame一些性质索引、切片修改数据重新索引丢弃指定轴上的值算术运算函数应用和映射排序和...
    99+
    2024-04-02
  • Python入门知识点汇总
    Python的设计目标之一是让代码具备高度的可阅读性。它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观。它不像其他的静态语言如C、Pascal那样需要重复书写声明语句,也不像它们的语法那样经常有特殊情况和意外。缩进...
    99+
    2023-01-31
    知识点 入门 Python
  • SQL必知必会知识点汇总
    前言 ❤欢迎大家阅读我的文章呀❤ 今天是SQL必知必会的最后一块练习。 希望你们在我的文章当中能有所收获!!! SLogan:利用有限的时间,撸起袖子加油干!   本篇内容主要总结了【SQL必知必会】当中的一些知识点以及我做题过程当中...
    99+
    2023-08-24
    sql 数据库 c# mysql
  • iOS练手项目知识点汇总
    基础理解篇 Objective-C是一种面向对象的编程语言,它支持元编程。元编程是指编写程序来生成或操纵其他程序的技术。 Objective-C中,元编程可以使用Objective-C的动态特性来实现...
    99+
    2023-09-12
    ios cocoa macos
  • R语言符号知识点汇总
    符号 当在R中定义一个变量时,实际上就是在环境中将一个符号赋给一个值 x <- 1 实际上就是在全局环境中将符号x赋给一个长度为1,值为1的向量对象 当R解释器对表达式求...
    99+
    2024-04-02
  • JavaSpringboot重要知识点整理汇总
    1、springboot controller 单例 Spring中 controller默认是单例的,因为单例所以不是线程安全的。 所以需要注意下面几点 不要在Contr...
    99+
    2024-04-02
  • 前端知识总汇
    前端知识总汇 HTML 超文本标记语言 注释 由于 HTML 代码杂乱无章,我们习惯性的用注释来划定区域方便后续的查找 HTML 的文档结构 DOCTYPE html> head 内常用标签 ...
    99+
    2023-08-30
    前端
  • MySql 知识大汇总
    目录 一、常用的数据类型 二、数据库索引 什么是数据库索引 索引的作用 索引是否越多越好 索引的分类 三、sql语句 插入 更新 删除 查询         普通查询         子查询         连表查询 四、常用的一些函数 g...
    99+
    2023-09-07
    mysql 数据库
  • 云服务器相关知识点汇总
    云服务器是一种虚拟的、共享的、高可用的计算资源,通常用于远程服务器环境。作为云计算的重要组成部分之一,云服务器的管理、运维和性能优化是非常重要的。以下是一些常见的云服务器相关知识点: 数据备份和恢复:云服务器提供数据备份和恢复的功能,可...
    99+
    2023-10-26
    知识点 服务器
  • 蓝桥杯JAVA-知识点汇总复习
    为了准备第十三届蓝桥杯大赛(软件类)省赛以及其他的比赛。现将知识点汇总整理一下,顺便自己也复习学习。 个人博客 www.tothefor.com 为方便,放一些蓝桥杯、一本通的题目和数据。可自行拿取。...
    99+
    2023-10-28
    蓝桥杯 java 职场和发展
  • mysql基础知识汇总
    本篇内容介绍了“mysql基础知识汇总”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!SQL基础知识整理:s...
    99+
    2024-04-02
  • Python Requests库知识汇总
    目录什么是Requests库?为什么要学习Requests库?快速开始发送请求URL传参响应内容二进制响应内容JSON响应内容原始响应内容自定义请求头更复杂的POST请求More c...
    99+
    2023-05-18
    Python Requests库 Python Requests
  • Vue 与 TypeScript 的交锋:知识点大汇总
    认识 Vue 和 TypeScript Vue 是一款流行的 JavaScript 框架,用于构建交互式用户界面。它以其简洁、响应性和数据绑定功能而闻名。 TypeScript 是一种超集 JavaScript 语言,它通过类型系统扩展了...
    99+
    2024-03-08
    Vue TypeScript TypeScript 入门 Vue 入门 Vue TypeScript 集成
  • 云服务器相关知识点汇总表
    一、云服务器的技术特点 高可用性:云服务器采用高可用技术,能够在不同的物理节点之间实现快速的数据同步和故障切换,确保服务器的正常运行。 弹性扩展:云服务器可以按需扩展存储和计算资源,根据用户需求动态调整计算能力和存储容量,实现弹性扩展。...
    99+
    2023-10-28
    知识点 汇总表 服务器
  • Java常见知识点汇总(①)——数据类型
    一. Java中的数据类型变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。 因此,通过定义不同类型的变量,可以在内存中储存整数、小数...
    99+
    2023-06-05
  • Java常见知识点汇总(⑦)——集合框架
    一. Collection和Collections的区别Collection是集合继承结构中的顶层接口(interface),其是Iterable的子类。Collections 是提供了对集合进行操作的强大方法的工具类 ,它包含有各种有关集...
    99+
    2023-06-05
  • 前端必备的一些nginx知识点汇总
    目录前言nginx简介反向代理负载均衡动静分离使用和配置安装常用命令配置项目部署配置缓存配置跨域配置gzip压缩配置总结前言 最近在做一个后台项目,需要加载一个大型的的文件,一开始这...
    99+
    2023-03-19
    前端如何配置nginx 前端开发知识点 前端nginx
  • 常用的Java数据结构知识点汇总
    目录1.数据结构分类2.线性数据结构2.1数组2.2可变数组2.3链表2.4栈2.5队列3.非线性数据结构3.1树3.2图3.3散列表3.4堆1. 数据结构分类 按照线性和非线性可以...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作