下面欢迎Go同学
01
主持人:欢迎Go同学
Go同学:
大家好,我叫Go,在服务端的开发中,总能抓住程序员的痛点,以最直接、简单、高效、稳定的方式来解决问题,我还是开源的哟!
02
记者:Go你好,请问你的特别之处在哪?
Go同学:
~易学习
~基于 goroutines 和 channels 的简单并发编程
~丰富的标准库
~Go 性能优越
~语言层面定义源代码的格式化
~标准化的测试框架
~Go 程序方便操作
~Defer 声明,避免忘记清理
~新类型
03
记者:Go你好,请问你的应用场景有哪些?
Go同学:
我提供了纤程、指针、 unsafe, cgo 加上 C/C++ 兼容的内存布局和跨平台的汇编,所以问题不是我适合做什么,是你有能力用我做什么。
05
记者:Go你好,请问多线程之间如何传递数据?
Go同学:
其实go的参数传递,核心就是一句话:go里所有参数传递都是值传递,既把参数复制一份放到函数里去用。
go的函数传参,不管参数是什么类型,都会复制一份,然后新的参数在函数内部被使用。
不像其他语言,有的时候传参只是传递一个原来参数的引用(引用和指针的区别,欢迎翻看我上上上上一篇分享),在函数内部操作变量,其实还是操作的原变量。go内不会直接的操作原变量。
06
记者:Go同学,请问你如何安装?
Go同学:
和其他语言的安装类似,我也可以采用三种方式进行,从简单到复杂依次是通过系统方式安装、官方二进制包安装和源码编译安装。我支持的系统:Linux、FreeBSD、Mac OS、Windows;官方下载地址:https://golang.org/dl/;
07
记者:Go同学,请问基础语法是怎么样的?
Go同学:
~Go语言要求标识符以一个字母或下划线开头,后面可以跟任意数量的字母、数字、下划线。不能使用关键字作为标识符区分大小写,变量num和变量Num是两个变量;
~Go语言的变量声明方式和其他语言(如C、Java、Python)不太一样。
~当我们声明变量时,可以对其进行初始化。当有初始值时,我们可以省略变量的类型,变量会根据对应的初始值获取正确的类型。
~当我们使用:=声明变量时,不用写var也不用写类型,但是这种方式只能在函数内部使用,不能在函数外部使用。当在函数外部声明变量时,只能使用var。
~Go 语言的字符串可以通过 + 实现;
~Go 代码中会使用到25 个关键字或保留字;
~Go 语言中变量的声明必须使用空格隔开。
...还有太多太多,想了解详细的可以关注云码技术栈,我们会为您提供更好的资料!
08
记者:Go你好,数据类型的是怎么样的?
Go同学:
~布尔型
常量 true 或者 false
~数值类型
整数类型分为:有符号数:int、int8、int16、int32 (rune)、int64无符号数:uint、uint8 (byte)、uint16、uint32、uint64、其中int和uint的两种类型的长度相同,取决于具体的编译器,比如在32位系统上通常为32位,在64位系统上通常为64位。像int8、uint8这些类型则是Go语言直接定义好位数的类型。rune、byte是int32、uint8的别名。当我们需要使用整数时,应当尽量使用int类型。当然,如果你有特殊的理由使用其他整数类型,便另当他论。浮点数类型有两种:float32和float64,注意没有所谓的float类型。复数类型也有两种:complex64和complex128
~字符串类型
~派生类型:
(a) 指针类型(Pointer)
(b) 数组类型
(c) 结构化类型(struct)
(d) Channel 类型
(e) 函数类型
(f) 切片类型
(g) 接口类型(interface)
(h) Map 类型
09
记者:Go同学,请问您如何定义变量?
Go同学:
~声明变量的一般形式是使用 var 关键字
~第一种,指定变量类型,如果没有初始化,则变量默认为零值。
~第二种,根据值自行判定变量类型
~第三种,省略 var, 注意 *:=* 左侧如果没有声明新的变量,就产生编译错误
10
记者:Go同学,请问您如何定义常量?
Go同学:
~const identifier [type] = value,略类型说明符 [type],因为编译器可以根据变量的值来推断其类型
~常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型
11
记者:Go同学,请问你有哪些运算符
Go同学:
算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、其他运算符
12
记者:Go同学,您有哪些流程控制语句?
Go同学:
与其他编程语言相似,主要的逻辑控制语句都是这几类:if,if else,swith,select
13
记者:Go你好,有哪些跳出循环或者是终止循环的方法?
Go同学:
我有for 循环,可以用break/continue/goto语句
14
记者:Go同学,请问如何定义函数
Go同学:
函数定义解析:
~func:函数由 func 开始声明
~function_name:函数名称,函数名和参数列表一起构成了函数签名。
~parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
~return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
~函数体:函数定义的代码集合。
15
记者:Go语言有哪些变量作用域
Go同学:
~函数内定义的变量称为局部变量
~函数外定义的变量称为全局变量
~函数定义中的变量称为形式参数
16
记者:Go你好,数组该怎么使用?
Go同学:
Go 语言数组声明需要指定元素类型及元素个数,语法格式如下:
var variable_name [SIZE] variable_type
Go语言初始化数组:
var test = [5] float32{200.0, 2.0, 3.14, 20.0, 100.0}
可以通过索引获取/设置数组中的值:
test[4]
test[2] = 100
17
记者:Go同学,请问如何处理异常?
Go同学:
Go 语言通过内置的错误接口提供了非常简单的错误处理机制。
error类型是一个接口类型,这是它的定义:
type error interface {
Error() string
}
我们可以在编码中通过实现 error 接口类型来生成错误信息。
函数通常在最后的返回值中返回错误信息。使用errors.New 可返回一个错误信息:
func Sqrt(f float64) (float64, error) {
if f return 0, errors.New("math: square root of negative number")
}
// 实现
}
18
记者:Go同学,有什么好用的开发工具吗?
Go同学:
~IDEA
IntelliJ idea是非常强大的一款IDE,支持丰富的插件。需要安装两个插件Go和File Watcher
~GoLand
GoLand 是 Jetbrains 家族的 Go 语言 IDE
~LiteIDE
LiteIDE 是一款开源、跨平台的轻量级 Go 语言集成开发环境(IDE)
~Eclipse
Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C++和Python的开发工具。
参考资料:
https://www.runoob.com/go/go-tutorial.html
云码教育
微信号|云码技术栈
新浪微博|云码技术栈