![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
EOS
尹成
尹成微信18510341407,助理微信18514203048
展开
-
兄弟连go教程(1)类型-变量
Go 是静态类型语⾔言,不能在运⾏行期改变变量类型。使⽤用关键字 var 定义变量,⾃自动初始化为零值。如果提供初始化值,可省略变量类型,由编译器⾃自动推断。var x intvar f float32 = 1.6var s = "abc"在函数内部,可⽤用更简略的 ":=" ⽅方式定义变量。func main() {x := 123 // 注意检查,是定义新局部变量,还是修改全局变量。该⽅...原创 2018-07-03 14:48:49 · 593 阅读 · 0 评论 -
兄弟连go教程(13)函数 返回值
不能⽤用容器对象接收多返回值。只能⽤用多个变量,或 "_" 忽略。func test() (int, int) {return 1, 2}func main() {// s := make([]int, 2)// s = test() // Error: multiple-value test() in single-value contextx, _ := test()printl...原创 2018-07-04 13:15:34 · 571 阅读 · 0 评论 -
兄弟连go教程(14)函数 - 匿名函数
匿名函数可赋值给变量,做为结构字段,或者在 channel ⾥里传送。// --- function variable ---fn := func() { println("Hello, World!") }fn()// --- function collection ---fns := [](func(x int) int){func(x int) int { return x + 1...原创 2018-07-04 13:17:18 · 648 阅读 · 0 评论 -
兄弟连go教程(15)函数 - 延迟调用
关键字 defer ⽤用于注册延迟调⽤用。这些调⽤用直到 ret 前才被执⾏行,通常⽤用于释放资源或错误处理。func test() error {f, err := os.Create("test.txt")if err != nil { return err }defer f.Close() // 注册调⽤用,⽽而不是注册函数。必须提供参数,哪怕为空。f.WriteString("He...原创 2018-07-04 13:20:39 · 596 阅读 · 0 评论 -
兄弟连go教程(15)函数 - 错误处理
没有结构化异常,使⽤用 panic 抛出错误,recover 捕获错误。func test() {defer func() {if err := recover(); err != nil {println(err.(string)) // 将 interface{} 转型为具体类型。}}()panic("panic error!")}由于 panic、recover 参数类型为 ...原创 2018-07-04 13:24:05 · 604 阅读 · 0 评论 -
兄弟连go教程(16)数据 - Array
和以往认知的数组有很⼤大不同。•数组是值类型,赋值和传参会复制整个数组,⽽而不是指针。•数组⻓长度必须是常量,且是类型的组成部分。[2]int 和 [3]int 是不同类型。•⽀支持 "=="、"!=" 操作符,因为内存总是被初始化过的。•指针数组 [n]*T,数组指针 *[n]T。可⽤用复合语句初始化。a := [3]int{1, 2} // 未初始化元素值为 0。b := [...]int{...原创 2018-07-04 13:26:10 · 761 阅读 · 0 评论 -
兄弟连go教程(17)数据 - Slice
需要说明,slice 并不是数组或数组指针。它通过内部指针和相关属性引⽤用数组⽚片段,以实现变⻓长⽅方案。runtime.hstruct Slice{ // must not move anythingbyte* array; // actual datauintgo len; // number of elementsuintgo cap; // allocated number of...原创 2018-07-04 13:34:52 · 741 阅读 · 0 评论 -
兄弟连go教程(18)数据 - Map
引⽤用类型,哈希表。键必须是⽀支持相等运算符 (==、!=) 类型,⽐比如 number、string、pointer、array、struct,以及对应的 interface。值可以是任意类型,没有限制。m := map[int]struct {name stringage int}{1: {"user1", 10}, // 可省略元素类型。2: {"user2", 20},}pr...原创 2018-07-04 13:46:27 · 1026 阅读 · 0 评论 -
兄弟连go教程(19)数据 -Struct
值类型,赋值和传参会复制全部内容。可⽤用 "_" 定义补位字段,⽀支持指向⾃自⾝身类型的指针成员。type Node struct {_ intid intdata *bytenext *Node}func main() {n1 := Node{id: 1,data: nil,}n2 := Node{id: 2,data: nil,next: &n1,}}...原创 2018-07-04 13:49:23 · 1092 阅读 · 0 评论 -
兄弟连go教程(19)数据 - 匿名字段
匿名字段不过是⼀一种语法糖,从根本上说,就是⼀一个与成员类型同名 (不含包名) 的字段。被匿名嵌⼊入的可以是任何类型,当然也包括指针。type User struct {name string}type Manager struct {Usertitle string}m := Manager{User: User{"Tom"}, // 匿名字段的显式字段名,和类型名相同。ti...原创 2018-07-04 13:51:30 · 813 阅读 · 1 评论 -
兄弟连go教程(19)数据 - ⾯面向对象
⾯面向对象三⼤大特征⾥里,Go 仅⽀支持封装,尽管匿名字段的内存布局和⾏行为类似继承。没有class 关键字,没有继承、多态等等。type User struct {id intname string}type Manager struct {Usertitle string}m := Manager{User{1, "Tom"}, "Administrator"}// var...原创 2018-07-04 13:52:49 · 990 阅读 · 0 评论 -
兄弟连go教程(12)函数 - 变参
变参本质上就是 slice。只能有⼀一个,且必须是最后⼀一个。func test(s string, n ...int) string {var x intfor _, i := range n {x += i}return fmt.Sprintf(s, x)}func main() {println(test("sum: %d", 1, 2, 3))}使⽤用 slice 对象做...原创 2018-07-04 13:07:58 · 575 阅读 · 0 评论 -
兄弟连go教程(11)函数 - 函数定义
不⽀支持 嵌套 (nested)、重载 (overload) 和 默认参数 (default parameter)。•⽆无需声明原型。•⽀支持不定⻓长变参。•⽀支持多返回值。•⽀支持命名返回参数。•⽀支持匿名函数和闭包。使⽤用关键字 func 定义函数,左⼤大括号依旧不能另起⼀一⾏行。func test(x, y int, s string) (int, string) { // 类型相同的相邻参...原创 2018-07-04 13:06:11 · 585 阅读 · 0 评论 -
兄弟连golang神技(1)-关于 Go 语言的介绍
计算机一直在演化,但是编程语言并没有以同样的速度演化。现在的手机,内置的 CPU 核数可能都多于我们使用的第一台电脑。高性能服务器拥有 64 核、128 核,甚至更多核。但是我们依旧在使用为单核设计的技术在编程。编程的技术同样在演化。大部分程序不再由单个开发者来完成,而是由处于不同时区、不同时间段工作的一组人来完成。大项目被分解为小项目,指派给不同的程序员,程序员开发完成后,再以可以在各个应用程序...原创 2018-07-03 14:55:01 · 1355 阅读 · 2 评论 -
兄弟连go教程(2)类型-常量
常量值必须是编译期可确定的数字、字符串、布尔值。)func main() {const x = "xxx" // 未使⽤用局部常量不会引发编译错误。}const x, y int = 1, 2 // 多常量初始化const s = "Hello, World!" // 类型推断const ( // 常量组a, b = 10, 100c bool = falseGo 学习笔记, 第...原创 2018-07-03 17:27:28 · 440 阅读 · 0 评论 -
兄弟连go教程(3)基本类型
更明确的数字类型命名,⽀支持 Unicode,⽀支持常⽤用数据结构。类型 c长度 默认值 说明 ...原创 2018-07-04 10:55:28 · 674 阅读 · 0 评论 -
兄弟连go教程(4)类型-引用及转换
a := 100if a { // Error: non-bool a (type int) used as if conditionprintln("true")}原创 2018-07-04 11:00:38 · 1200 阅读 · 0 评论 -
兄弟连go教程(5)字符串
字符串是不可变值类型,内部⽤用指针指向 UTF-8 字节数组。•默认值是空字符串 ""。•⽤用索引号访问某字节,如 s[i]。•不能⽤用序号获取字节元素指针,&s[i] ⾮非法。•不可变类型,⽆无法修改字节数组。•字节数组尾部不包含 NULL。runtime.hstruct String{byte* str;intgo len;};使⽤用索引号访问字符 (byte)。s := "a...原创 2018-07-04 11:15:10 · 653 阅读 · 0 评论 -
兄弟连go教程(6)指针
⽀支持指针类型 *T,指针的指针 **T,以及包含包名前缀的 *<package>.T。•默认值 nil,没有 NULL 常量。•操作符 "&" 取变量地址,"*" 透过指针访问⺫⽬目标对象。•不⽀支持指针运算,不⽀支持 "->" 运算符,直接⽤用 "." 访问⺫⽬目标成员。func main() {type data struct{ a int }var d = d原创 2018-07-04 11:18:57 · 699 阅读 · 0 评论 -
兄弟连go教程(7)自定义类型
可将类型分为命名和未命名两⼤大类。命名类型包括 bool、int、string 等,⽽而 array、slice、map 等和具体元素类型、⻓长度等有关,属于未命名类型。具有相同声明的未命名类型被视为同⼀一类型。•具有相同基类型的指针。•具有相同元素类型和⻓长度的 array。•具有相同元素类型的 slice。•具有相同键值类型的 map。•具有相同元素类型和传送⽅方向的 channel。•具有相...原创 2018-07-04 12:39:56 · 751 阅读 · 0 评论 -
兄弟连go教程(8)表达式--保留字;运算符
语⾔言设计简练,保留字不多。break default func interface selectcase defer go map structchan else goto package switchconst fallthrough if range typecontinue for import return var全部运算符、分隔符,以及其他符号。+ & += &...原创 2018-07-04 12:51:05 · 572 阅读 · 0 评论 -
兄弟连go教程(9)表达式-初始化
初始化复合对象,必须使⽤用类型标签,且左⼤大括号必须在类型尾部。// var a struct { x int } = { 100 } // syntax error// var b []int = { 1, 2, 3 } // syntax error// c := struct {x int; y string} // syntax error: unexpected semicolon ...原创 2018-07-04 12:54:11 · 601 阅读 · 0 评论 -
兄弟连go教程(10)表达式 - 控制流
1. IF很特别的写法:•可省略条件表达式括号。•⽀支持初始化语句,可定义代码块局部变量。•代码块左⼤大括号必须在条件表达式尾部。x := 0// if x > 10 // Error: missing condition in if statement// {// }if n := "abc"; x > 0 { // 初始化语句未必就是定义变量,⽐比如 println("in...原创 2018-07-04 13:03:30 · 558 阅读 · 0 评论