我献出这篇 go 精华总结,阁下该如何应对(1)

简介: 我献出这篇 go 精华总结,阁下该如何应对(1)

1.初识包管理

关于包管理的总结:


一个文件夹可以称为一个包。

在文件夹(包)中可以创建多个文件。

在同一个包下的每个为文件中必须指定 包名称且相同

重点:关于包的分类


main包,如果是main包,则必须写一个main函数,此函数就是项目的入口(main主函数)。 编译生成的就是一个可执行文件。

非main包,用来将代码进行分类,分别放在不同的包和文件中。

微信截图_20231016220654.png

微信截图_20231016220703.png

注意:


调用其他包的功能,需要先 import 导入,然后再使用;调用自己包中的功能时,直接调用即可(无需导入)


文件中的函数首字母是小写,表示此函数只能被当前包内部文件调用。首字母是大写,则意味着任何包都可以调用。


2.输出

在终端将想要展示的数据显示出来,例如:欢迎登录、请输入用户名等。。。


内置函数(不推荐)

print

println

fmt包(推荐)

fmt.Print

fmt.Println

扩展:进程里有 stdin/stdout/stderr 。

package main
import "fmt"
func main() {
  // 基于内置函数(不推荐)
  //print("你好 \n")
  //print("我是马云 \n")
  //println("你好")
  //println("我是马云")
  // fmt包(推荐)
  //fmt.Print("你好 \n")
  //fmt.Print("我是马云 \n")
  //fmt.Println("你好")
  //fmt.Println("我是马云")
  //fmt.Println("我叫", "马云", "我媳妇", "是个", "....")
  //fmt.Println("我叫马云我媳妇是个....")
  // fmt包 扩展:格式化输出
  // %s,占位符 "文本"
  // %d,占位符 整数
  // %f,占位符 小数(浮点数)
  // %.2f,占位符 小数(保留小数点后2位,四舍五入)
  // 百分比
  fmt.Printf("老汉开着%s,去接%s的媳妇,多少钱一次?%d块。嫂子给打折吧,%.2f怎么样?小哥哥包你100%%满意", "车", "老男孩", 100, 3.889)
}

3.注释

  • 单行注释, //
  • 多行注释, /* */

快捷:contrl + ?

4.初识数据类型

  • 整型,整数
  • 字符串,文本
  • 布尔型,真假
package main
import "fmt"
func main() {
  // 整型
  fmt.Println(666)
  fmt.Println(6 + 9)
  fmt.Println(6 - 9)
  fmt.Println(6 * 9)
  fmt.Println(16 / 9) // 商
  fmt.Println(16 % 9) // 余数
  // 字符串类型,特点:通过双引号
  fmt.Println("好人")
  fmt.Println("离离原上草,一岁一枯荣")
  fmt.Println("aaa" + "sss")
  //fmt.Println("alex" + 666)
  fmt.Println("aaa" + "666")
  // 对比
  fmt.Println("1" + "2") // 结果:"12"
  fmt.Println(1 + 2)     // 结果:3
  // 布尔类型,真假
  fmt.Println(1 > 2) // false  假
  fmt.Println(1 < 2) // true   真
  fmt.Println(1 == 2)
  fmt.Println(1 >= 2)
  fmt.Println("AAA" == "aaa")
  // 超前
  if 2 > 1 {
    fmt.Println("222")
  } else {
    fmt.Println("111")
  }
}

5.变量

可以理解为昵称。

  • 声明 + 赋值
var sd string = "wowoow"
fmt.Println(sd)
var age int = 73
fmt.Println(age)
var flag bool = true
fmt.Println(flag)

先声明后赋值

// 声明了一个字符类型变量 sd
var sd string
// 给sd变量赋值
sd = "wowoow"
fmt.Println(sd)

5.1 声明变量的意义?

  • 编写代码省事
// 文本,请将文本输出3次:"伤情最是晚凉天,憔悴斯人不堪怜。"
var message string = "伤情最是晚凉天,憔悴斯人不堪怜。"
fmt.Println(message)
fmt.Println(message)
fmt.Println(message)

存储结果,方便之后使用

// 存储结果,方便之后使用
var v1 int = 99
var v2 int = 33
var v3 int = v1 + v2
var v4 int = v1 * v2
var v5 int = v1 + v2 + v3 + v4
fmt.Println(v1, v2, v3, v4, v5)

存储用户输入的值

var name string
fmt.Scanf("%s", &name) // 用户输入字符串并赋值给name变量
if name == "sss" {
    fmt.Println("用户名输入正确")
} else {
    fmt.Println("用户名输入失败")
}

5.2 变量名要求

  • 【要求】变量名必须只包含:字母、数字、下划线
var %1 string,错误
var $ string,错误

【要求】数字不能开头

var 1 string  错误
var 1name string  错误
var _ string 正确

【要求】不能使用go语言内置的关键字

var var string = "南通州北通州南北通州通南北"  错误
break、default、func、interface、select、case、defer、go、map、struct、chan、else、goto、package、switch、const、fallthrough、if、range、type、continue、for、import、return、var
  • 建议
  • 变量名见名知意:name/age/num ; v1、v2、v3
  • 驼峰式命名:myBossName / startDate

练习题:

var n1 int 
var data bool
var _9 string

5.3 变量简写

  • 声明+赋值
var name string = "我"
var name = "我"
name := "我"  // 推荐

先声明再赋值

var name string
var message string
var data string
var name,message,data string
name = "我"
message = "中奖了"
data = "中了5000w"

因式分解,例如:声明5个变量,分别有字符串、整型

var (
    name   = "李白"
    age    = 18
    hobby  = "吟诗作对"
    salary = 1000000
    gender string  // 只声明但不赋值,有一个默认: ""
    length int     // 只声明但不赋值,有一个默认: 0
    sb bool     // 只声明但不赋值,有一个默认: false
)
fmt.Println(name, age, hobby, salary, gender,length,sb)

扩展:go编译器会认为声明变量不使用 就是浪费资源。

5.4 作用域

如果我们定义了大括号,那么在大括号中定义的变量。

  • 不能被上级使用。
  • 可以在同级使用。
  • 可以再子级使用。
package main
import "fmt"
func main() {
  name := "韩信"
  fmt.Println(name)
  if true {
    age := 18
    name := "alex"
    fmt.Println(age)
    fmt.Println(name)
  }
  fmt.Println(name)
}

全局变量和局部变量

  • 全局变量,未写在函数中的变量称为全局变量;不可以使用v1:=xx方式进行简化;可以基于因式分解方式声明多个变量;项目中寻找变量时最后一环。
  • 局部变量,编写在{}里面的变量;可以使用任意方式简化;可以基于因式分解方式声明多个变量;
package main
import "fmt"
// 全局变量(不能以省略的方式)
var school string = "清华大学" // 可以
//var school = "清华大学"    // 可以
//school := "清华大学"       // 不可以
var (
  v1 = 123
  v2 = "你好"
  v3 int
)
func main() {
  name := "露娜" // 局部变量
  fmt.Println(name)
  if true {
    age := 18      // 局部变量
    name := "tom" // 局部变量
    fmt.Println(age)
    fmt.Println(name)
  }
  fmt.Println(name)
  fmt.Println(school)
  fmt.Println(v1, v2, v3)
}

5.5 赋值及内存相关

示例1:

name := "妲己"

示例2:

name := "wwwwww"
nickname := name

注意:这一点与 python 不同。

package main
import "fmt"
func main() {
  name := "小乔"
  nickname := name
  fmt.Println(name, &name)
  fmt.Println(nickname, &nickname)
}

示例3:

name := "甄姬"
nickname := name
name = "luna"
package main
import "fmt"
func main() {
  name := "www"
  nickname := name
  fmt.Println(name, &name)
  fmt.Println(nickname, &nickname)
  name = "wwwwww"
  fmt.Println(name, &name)
  fmt.Println(nickname, &nickname)
}
注意事项

使用int、string、bool这三种数据类型时,如果遇到变量的赋值则会拷贝一份。【值类型】

name := "大乔"
nickname := name

提示:后续在数据类型中会详细再讲解。

阶段练习题

  1. package main的作用?
  2. 单行注释和多行注释分别是什么?
  3. 下面声明变量的方式错误的有哪些?
var name = "武松"
var age int = 18
hobby = "嫂子"
nickName string = "一米八大高个"
webSite := "我在景阳冈打老虎"
var age int = 18
age = 19

下面声明变量的方式正确的有哪些?

var v1,v2,v3 int
var (
  v6 = 123
    v7 string
)
var v4,v5 = 11,22
v4,v5 = 11,22
v4,v5 := 11,22
  1. 变量名规范。
  2. 看代码写结果
package main
import "fmt"
var number = 9999
func main() {
  number := 666
  fmt.Println(number)
}

看代码写结果

package main
import "fmt"
var number = 99
func main() {
  number := 66
  if true {
    number := 33
    fmt.Println(number)
  }
  fmt.Println(number)
}

看代码写结果

package main
import "fmt"
var number = 99
func main() {
  number := 66
  if true {
    number := 33
    fmt.Println(number)
  }
  number = 88
  fmt.Println(number)
}

看代码写结果

package main
import "fmt"
var number = 99
func main() {
  if true {
    fmt.Println(number)
  }
  number = 88
  fmt.Println(number)
}

看代码写结果

package main
import "fmt"
var number = 99
func main() {
  number := 88
  if true {
    number = 123
    fmt.Println(number)
  }
  fmt.Println(number)
}

看代码写结果

package main
import "fmt"
var number = 99
func main() {
  fmt.Println(number)
  number := 88
  if true {
    number = 123
    fmt.Println(number)
  }
  fmt.Println(number)
}
相关文章
|
Cloud Native 中间件 Java
Go语言学习路线 - 8.高级篇:从五个问题来畅想Go工程师的未来发展
有人常说,编程语言对软件工程师来说并不重要,更重要的是软件工程思想、架构设计能力等更高层面的内容。 这个观点本身没有问题,但它更多的是针对有相当工作经验的程序员。对于绝大多数的人,编程语言依然是最重要、最核心的技能,也是通往更高层面的敲门砖。所以,精通一门编程语言,不仅仅要熟悉其语法与原理,更要了解其周边的生态,包括框架、开源库、中间件等,以及掌握它适用的业务场景。
161 0
|
6月前
|
SQL 关系型数据库 测试技术
技术经验分享:Go开源项目
技术经验分享:Go开源项目
45 0
|
4月前
|
安全 Java 测试技术
Go 高性能编程心法探秘
文章深入探讨了Go语言在高性能编程中的各种技巧,包括常用数据结构的使用、内存管理、并发编程策略,以及如何通过减少锁的使用、有效利用sync包中的工具来优化程序性能。
23 0
|
6月前
|
存储 安全 Java
【面试宝藏】Go基础面试题其一
Go语言(Golang)结合C的性能和Python的易用性,具有简单语法、高效并发、自动垃圾回收等优点。它支持基本和派生数据类型,通过包进行代码管理。类型转换需显式进行,如将整数转为浮点数。Goroutine是轻量级线程,通过channel进行并发同步。Go接口可嵌套,同步锁用于控制并发访问。Channel提供类型安全的通信,注意避免死锁。Go Convey用于测试,`new`和`make`分别用于值类型和引用类型的初始化。了解这些,有助于更好地掌握Go语言。
56 2
|
7月前
|
Go 索引
Golang随笔之《Go专家编程》查漏补缺
Golang随笔之《Go专家编程》查漏补缺
75 5
|
Go 调度 数据安全/隐私保护
后端实践--go并发编程 青训营
后端实践--go并发编程 青训营
|
存储 中间件 测试技术
我献出这篇 go 精华总结,阁下该如何应对(2)
我献出这篇 go 精华总结,阁下该如何应对(2)
|
存储 Java 关系型数据库
No1.入门第一课,我的go开发之旅
No1.入门第一课,我的go开发之旅
|
Go
Go有意思小问题汇集
Go有意思小问题汇集
84 0
|
存储 Java 编译器
与Go的初次见面 | 青训营笔记
与Go的初次见面 | 青训营笔记
77 0
下一篇
DataWorks