深入浅出Go:掌握基础知识的关键要点

 更新时间:2023年10月13日 08:39:25   作者:mb652682e942691  
Go是一种开源的编程语言,由Google开发,它具有简洁、高效、并发性强的特点,适用于构建可靠的、高性能的软件系统,本文将介绍Go的基础知识,需要的朋友可以参考下
  • 所有go源码以.go结尾.
  • golang可执行程序,package main有且只有一个main入口函数.
  • 两种注释:单行注释//和多行注释/* */

1. 变量命名:

标识符以字母或下划线开头,大小写敏感 以数字开头、含有特殊符号不行.
_是特殊标识符,用来忽略结果
保留关键字

2. import方式:

import("fmt")
import {
"fmt"
}

3. 常量:

常量使用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 )

4. 变量:

语法: 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类型 )

4.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). 举例:

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
}

不管值类型是传递值还是内存地址,都是重新拷贝一份.

4.2 变量的作用域:

局部变量:

  a. 在函数内部声明的变量.

  b. 生命周期仅限于函数内部,出了这个函数,变量就销毁了.

全局变量:

  a. 在函数外部声明的变量.

  b. 生命周期作用于整个包,如果是大写的,则作用于整个程序.

  c. 在语义块{}中,也有作用域.如for循环中声明的变量,不能在for外面使用.

流程控制:

If / else分支判断
- switch case语句
for 语句
for range 语句 用来遍历数组、slice、map、chan

for i, v := range str {
fmt.Printf(“index[%d] val[%c] len[%d]\n”, i, v, len([]byte(v)))
}

默认值 string是一个空字符串 int是0

Go是一种简洁高效的编程语言,具有强大的并发性能和丰富的标准库。它适用于构建可靠的、高性能的软件系统。掌握Go的基础知识,将有助于开发者更好地利用Go的特性来编写高效的代码。

到此这篇关于深入浅出Go:掌握基础知识的关键要点的文章就介绍到这了,更多相关go 基础知识内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • go 判断两个 slice/struct/map 是否相等的实例

    go 判断两个 slice/struct/map 是否相等的实例

    这篇文章主要介绍了go 判断两个 slice/struct/map 是否相等的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • golang post请求常用的几种方式小结

    golang post请求常用的几种方式小结

    这篇文章主要介绍了golang post请求常用的几种方式小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • golang 调用c语言动态库方式实现

    golang 调用c语言动态库方式实现

    本文主要介绍了golang 调用c语言动态库方式实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 使用Go语言实现LRU缓存的代码详解

    使用Go语言实现LRU缓存的代码详解

    在日常开发中,缓存是提高系统性能的重要手段,LRU缓存是一种基于“最近最少使用”策略的缓存系统,其目的是在空间受限的情况下保留最新、最常用的数据,本文将详细讲解如何使用 Go 语言实现一个 LRU 缓存,需要的朋友可以参考下
    2024-11-11
  • Golang爬虫框架 colly的使用

    Golang爬虫框架 colly的使用

    本文主要介绍了Golang爬虫框架 colly的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Go语言学习笔记之反射用法详解

    Go语言学习笔记之反射用法详解

    这篇文章主要介绍了Go语言学习笔记之反射用法,详细分析了Go语言中反射的概念、使用方法与相关注意事项,需要的朋友可以参考下
    2017-05-05
  • go打印%v %+v %#v的区别及说明

    go打印%v %+v %#v的区别及说明

    文章总结了Go语言中fmt包中%v、%+v和%#v格式化动词的用法:%v只输出值,%+v输出字段名和值,%#v输出结构体名和字段信息
    2025-12-12
  • Golang中context库的高级应用

    Golang中context库的高级应用

    context库不仅对于提升代码的效率和性能至关重要,而且还帮助开发者在复杂的系统中保持代码的清晰和可维护性,下面我们就来看看context库的高级应用吧
    2024-01-01
  • Go的ORM框架的使用

    Go的ORM框架的使用

    GORM是一个功能丰富的Go语言ORM框架,提供全功能的数据库操作支持,本文就来介绍一下GORM框架的使用,感兴趣的可以了解一下
    2026-01-01
  • Go Slice 实现原理从底层机制到工程实践详解

    Go Slice 实现原理从底层机制到工程实践详解

    本文将从企业级开发视角,深入剖析 Slice的底层实现原理,结合性能优化实践,帮助开发者写出更高效、更安全的 Go 代码,对go slice实现原理感兴趣的朋友跟随小编一起看看吧
    2025-11-11

最新评论