首页 > 其他分享 >(转)Go语言基础——内置函数

(转)Go语言基础——内置函数

时间:2023-09-13 18:13:44浏览次数:36  
标签:10 内置 函数 int fmt Println slice Go

原文:https://blog.csdn.net/m0_60496161/article/details/130836218

内置类型
值类型:
bool
int(32 or 64), int8, int16, int32, int64
uint(32 or 64), uint8(byte), uint16, uint32, uint64
float32, float64
string
complex64, complex128
array -- 固定长度的数组
1
2
3
4
5
6
7
引用类型:(指针类型)
slice -- 序列数组(最常用)
map -- 映射
chan -- 管道
1
2
3
内置函数
make():用于创建一个新的slice、map或channel。make()函数的参数包括要创建的类型、长度和容量等。
// 创建一个长度为5,容量为10的slice
s := make([]int, 5, 10)
fmt.Println(len(s)) // 5
fmt.Println(cap(s)) // 10

// 创建一个长度为5,容量为5的map
m := make(map[string]int, 5)
m["one"] = 1
fmt.Println(m) // map[one:1]

// 创建一个容量为10的channel
c := make(chan int, 10)
c <- 1
fmt.Println(<-c) // 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
append():用于向slice中添加元素。如果slice的容量不足,append()函数会自动扩容。
// 向slice中添加元素
s := []int{1, 2, 3}
s = append(s, 4, 5, 6)
fmt.Println(s) // [1 2 3 4 5 6]
1
2
3
4
len():用于获取slice、map、string、array和channel等类型的长度。
s := []int{1, 2, 3, 4, 5}
fmt.Println(len(s)) // 5

m := map[string]int{"one": 1, "two": 2, "three": 3}
fmt.Println(len(m)) // 3

str := "hello"
fmt.Println(len(str)) // 5

arr := [5]int{1, 2, 3, 4, 5}
fmt.Println(len(arr)) // 5

c := make(chan int, 10)
c <- 1
fmt.Println(len(c)) // 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cap():用于获取slice、array和channel等类型的容量。
s := []int{1, 2, 3, 4, 5}
fmt.Println(cap(s)) // 5

arr := [5]int{1, 2, 3, 4, 5}
fmt.Println(cap(arr)) // 5

c := make(chan int, 10)
fmt.Println(cap(c)) // 10
1
2
3
4
5
6
7
8
copy():用于复制slice中的元素到另一个slice中。

s1 := []int{1, 2, 3, 4, 5}
s2 := make([]int, len(s1))
copy(s2, s1)
fmt.Println(s2) // [1 2 3 4 5]
1
2
3
4
5
close():用于关闭一个channel。
c := make(chan int, 10)
c <- 1
close(c)
fmt.Println(<-c) // 1
_, ok := <-c
fmt.Println(ok) // false
1
2
3
4
5
6
delete():用于删除map中的元素。
m := map[string]int{"one": 1, "two": 2, "three": 3}
delete(m, "two")
fmt.Println(m) // map[one:1 three:3]
1
2
3
panic()和recover():用于处理Go语言的异常。
func test() {
defer func() {
if err := recover(); err != nil {
fmt.Println("panic:", err)
}
}()
panic("test panic")
}

func main() {
test()
fmt.Println("after test")
}
// 输出:panic: test panic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
这是因为在test()函数中调用了panic()函数,导致程序发生了异常,然后通过defer语句中的匿名函数实现了异常的捕获和处理。具体地,defer语句会将一个匿名函数压入函数调用栈中,等待当前函数执行完毕后再执行该匿名函数。在本例中,匿名函数中使用了recover()函数来捕获异常,并将异常信息输出到控制台。由于recover()函数只有在defer语句中才能生效,因此需要将其放在defer语句中。最后,main()函数继续执行,输出了after test。
print()和println():用于输出内容到终端。
name := "Alice"
age := 20
fmt.Print("My name is ", name, ", and I'm ", age, " years old.")
// 输出:My name is Alice, and I'm 20 years old.

fmt.Println("My name is ", name, ", and I'm ", age, " years old.")
// 输出:
// My name is Alice, and I'm 20 years old.
// (自动换行)
1
2
3
4
5
6
7
8
9
内置接口error
type error interface { //只要实现了Error()函数,返回值为String的都实现了err接口

Error() String

}
1
2
3
4
5
可以看到,error接口只包含了一个Error()方法,该方法返回一个字符串类型的错误信息。因此,如果我们想要自定义一个错误类型,只需要实现Error()方法即可。

以下是一个自定义错误类型的示例,该错误类型表示除数为0的错误:

type DivideError struct {
dividend int
divisor int
}

func (de *DivideError) Error() string {
return fmt.Sprintf("error: divide %d by %d", de.dividend, de.divisor)
}

func divide(dividend, divisor int) (int, error) {
if divisor == 0 {
return 0, &DivideError{dividend, divisor}
}
return dividend / divisor, nil
}

func main() {
result, err := divide(10, 0)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(result)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
在该示例中,我们定义了一个DivideError结构体,该结构体包含了被除数和除数两个变量。然后,我们为该结构体定义了一个Error()方法,用于返回除数为0的错误信息。接着,我们定义了一个divide()函数,该函数用于计算两个数的商,并返回计算结果和错误信息。如果除数为0,则返回一个DivideError类型的错误。最后,在main()函数中调用divide()函数,如果返回的错误不为空,则输出错误信息;否则输出计算结果。

总之,error接口是Go语言中一个非常常用的接口,用于表示错误信息。在实际开发中,我们经常会使用error接口来自定义错误类型,并将错误信息返回给调用者。通过合理地使用error接口,我们可以提高程序的容错能力和健壮性。
————————————————
版权声明:本文为CSDN博主「不会喷火的小火龙」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_60496161/article/details/130836218

标签:10,内置,函数,int,fmt,Println,slice,Go
From: https://www.cnblogs.com/liujiacai/p/17700371.html

相关文章

  • 无涯教程-JavaScript - ISERROR函数
    描述如果ISERROR函数引用的是Excel错误,则该函数将返回逻辑值TRUE。否则返回FALSE。语法ISERROR(value)争论Argument描述Required/OptionalvalueAnerrorRequiredNotes此函数在公式中用于测试计算输出很有用。与IF函数结合使用时,此函数提供了一种用于定位公式中......
  • (转)对比学习:Golang VS Python3
    原文:https://juejin.cn/post/6844903843050815502Golang和Python都是目前在各自领域最流行的开发语言之一。Golang其高效而又友好的语法,赢得了很多后端开发人员的青睐,最适用于高并发网络编程的语言之一。Python不用说,TIOBE排行榜的前十常驻居民,现在已经稳定在前五了。在机器......
  • 你知道Golang的模板怎么用吗?带你了解动态文本的生成!
    GolangTemplateGo语言中的GoTemplate是一种用于生成文本输出的简单而强大的模板引擎。它提供了一种灵活的方式来生成各种格式的文本,例如HTML、XML、JSON等。GoTemplate的具有以下主要特性:简洁易用:GoTemplate语法简洁而易于理解。它使用一对双大括号“{{}}”来标记模板的......
  • 函数
    defget_squares(n:int,lo=1)->list:  """  获取指定数量的完全平方数  :paramn:指定长度  :paramlo:指定完全平方数最小值,并以此取得后面的完全平方值,默认值为1       若不为正确的完全平方值,则向下取值  :return:完全平方数......
  • 无涯教程-JavaScript - ISERR函数
    描述如果ISERR函数引用的是Excel错误(#N/A错误除外),则ISERR函数返回逻辑值TRUE。否则返回FALSE。语法ISERR(value)争论Argument描述Required/OptionalvalueAnerrorRequiredNotes此函数在公式中用于测试计算输出很有用。与IF函数结合使用时,此函数提供了一种用于......
  • c 语言 数组(一维)做函数参数
    @TOC前言函数参数:函数参数是函数内外连接的接口,可以互通数据。一、传递一维数组函数调用时,实参是给形参初始化,所以,实参传递什么类型的数据,形参就以什么类型去接住。比如一维数组,如下:函数fun1传递a,因为数组名就是数组的首地址,所以用int*p形参。函数fun2传递&a,是一维数组......
  • ODPS/MaxComputer 自定义UDF、UDTF函数
    ODPS/MaxComputer自定义UDF、UDTF函数前置条件:创建Maven工程导入jar包和打包工具:<dependency><groupId>com.aliyun.odps</groupId><artifactId>odps-sdk-udf</artifactId><version>0.29.10-public</ver......
  • 2023-09-13:用go语言,给定一个整数数组 nums 和一个正整数 k, 找出是否有可能把这个数组
    2023-09-13:用go语言,给定一个整数数组nums和一个正整数k,找出是否有可能把这个数组分成k个非空子集,其总和都相等。输入:nums=[4,3,2,3,5,2,1],k=4。输出:True。来自左程云。答案2023-09-13:第一种算法(canPartitionKSubsets1)使用动态规划的思想,具体过程如下:1.计算数组......
  • 2023-09-13:用go语言,给定一个整数数组 nums 和一个正整数 k, 找出是否有可能把这个数组
    2023-09-13:用go语言,给定一个整数数组nums和一个正整数k,找出是否有可能把这个数组分成k个非空子集,其总和都相等。输入:nums=[4,3,2,3,5,2,1],k=4。输出:True。来自左程云。答案2023-09-13:第一种算法(canPartitionKSubsets1)使用动态规划的思想,具体过程如下:1.......
  • 无涯教程-JavaScript - INFO函数
    描述INFO函数返回有关当前操作环境的信息。语法INFO(type_text)争论Argument描述Required/OptionalType_text指定要返回的信息类型的文本。下表给出了Type_text的值和相应的返回信息。RequiredType_text返回的信息"目录"当前目录或文件夹的路径。"num......