1、自定义类型
在Go语言中有一些基本的数据类型,如 string 、 整型 、 浮点型 、 布尔 等数据类型, Go语言中可以使用 type 关键字来定义自定义类型。
type是Go语法里的重要而且常用的关键字,type绝不只是对应于C/C++中的typedef。搞清楚type的使用,就容易理解go语言中的核心概念struct、interface、函数等的使用。
2、类型定义
2.1 定义结构体
使用 type 可以定义结构体类型:
//1、定义结构体
//结构体定义
type person struct {
name string //注意后面不能有逗号
age int
}
2....
sync.Once用于保证某个动作只被执行一次,可用于单例模式中,比如初始化配置。我们知道init()函数也只会执行一次,不过它是在main()函数之前执行,如果想要在代码执行过程中只运行某个动作一次,可以使用sync.Once,下面来介绍一下它的使用方法。
先来看下面的代码:
package main
import (
"fmt"
"sync"
)
func main() {
var num = 6
var once sync.Once
add_one := func() {
num = num + 1
}
minus_one := func() {
num...
关于Go 是传值还是传引用?很多人都讨论起来
下面我们就带着问题一起探索答案吧
1、Go 官方的定义
本部分引用 Go 官方 FAQ 的 “When are function parameters passed by value?”,内容如下。
如同 C 系列的所有语言一样,Go 语言中的所有东西都是以值传递的。也就是说,一个函数总是得到一个被传递的东西的副本,就像有一个赋值语句将值赋给参数一样。
例如:
向一个函数传递一个 int 值,就会得到 int 的副本。而传递一个指针值就会得到指针的副本,但不会得到它所指向的数据。
map 和 slice 的行为类似于指针:它们是包含指向底层 ma...
前言:
在 Go 语言中,有一个比较特殊的类型,经常会有刚接触 Go 的小伙伴问到,又或是不理解。 他就是 Go 里的空结构体(struct)的使用,常常会有看到有人使用:
ch := make(chan struct{})
还清一色的使用结构体,也不用其他类型。高度常见,也就不是一个偶发现象了,肯定是背后必然有什么原因。
1、为什么使用
说白了,就是希望节省空间。但,新问题又来了,为什么不能用其他的类型来做?
这就涉及到在 Go 语言中 ”宽度“ 的概念,宽度描述了一个类型的实例所占用的存储空间的字节数。 宽度是一个类型的属性。在 Go 语言中的每个值都有一个类型,值的宽度由其类型定义,并且总是 8...
一、for循环
Go 语言中没有 while 循环,只有一个 for 循环
for 变量初始化;条件;变量自增/自减 {
循环体内容
}
1、基本使用
for i := 0; i < 10; i++ {
fmt.Println(i)
}
2、省略第一部分
i := 0
for ; i < 10; i++ {
fmt.Println(i)
}
3、省略第一和三部分(这是一个 while 循环) for 条件 { 循环体内容 }
i := 0
for i < 10 {
fmt.Println(i)
i++
}...
一、结构体
结构体是一系列属性的集合(类似于 Python 中的类)
1、结构体的定义与使用
// 定义
type Person struct {
Name string
Age int
Sex string
}
func main() {
// 使用
var per Person
per.Name="XiaoYang"
fmt.Println(per)
}
2、定义并赋初值
type Person struct {
Name string
Age int
Sex string
}
func main() {...
前言:
随着编程语言的发展,Go 还很年轻。它于 2009 年 11 月 10 日首次发布。其创建者Robert Griesemer Rob Pike 和 Ken Thompson在 Google 工作,在那里大规模扩展的挑战激励他们将 Go 设计为一种快速有效的编程解决方案,用于具有大型代码库、管理由多个开发人员,具有严格的性能要求,并跨越多个网络和处理核心。 Go 的创始人在创建他们的新语言时也借此机会学习了其他编程语言的优点、缺点和漏洞。结果是一种干净、清晰和实用的语言,具有相对较少的命令和功能集。
1. Go 总是在构建中包含二进制文件
Go 运行时提供内存分配、垃圾收集、并发支持和网络等服务。它被编译到每个 Go 二...