Go基本数据类型
Go基本数据类型
第一部分:基本数据类型和操作符
1. 文件名&关键字&标识符
1. 所有go源码以.go结尾
2. 标识符以字母或下划线开头,大小写敏感,比如:
a. boy b. Boy c. a+b d. 0boy e. _boy f. =_boy g. _
3. _是特殊标识符,用来忽略结果
4. 保留关键字
break default func interface select case defer go map struct chan else goto package switch const fallthough if range type continue for import return var
3. 常量和变量
4. 数据类型和操作符
5. 字符串类型
go程序的基本结构
package main import “fmt” func main() {
fmt.Println(“hello, world”)
}
运行:
go run hello.go
1. 任何一个代码文件隶属于一个包
2. import 关键字,引用其他包:
import(“fmt”)
import(“os”)
通常习惯写成:
import (
“fmt”
“os”
)
3. golang可执行程序,package main,并且有且只有一个main入口函数
4. 包中函数调用:
a. 同一个包中函数,直接调用
b. 不同包中函数,通过包名+点+函数名进行调用
5. 包访问控制规则:
a. 大写意味着这个函数/变量是可导出的
b. 小写意味着这个函数/变量是私有的,包外部不能访问
包的概念
练习
方式一:
main.go
package main import (
"fmt"
"go_dev/day2/example1/add"
) func main() {
fmt.Println("Name:", add.Name)
fmt.Println("Age:", add.Age)
}
add.go
package add // 可以这么声明赋值,在编译前就确定值了
var Name string = "hbw"
var Age int = 18
方式二:
main.go
package main import (
"fmt"
"go_dev/day2/example1/add"
) func main() {
add.Test()
fmt.Println("Name:", add.Name)
fmt.Println("Age:", add.Age)
}
add.go
package add var Name string // 默认 ""
var Age int // 默认 1 // 不能这么赋值,编译会出错
// Name = "hbw"
// Age = 18 // 要有入口函数,才能初始化值
// 执行语句不能独立与函数之外
func Test() {
Name = "hbw"
Age = 18
}
包取别名
4. 每个源文件都可以包含一个init函数,这个init函数在main函数执行前自动被go运行框架调用。开发一个程序演示这个功能?
执行顺序:先全局变量 --> init --> main
main.go
package main import (
"fmt"
"go_dev/day2/example1/add"
) // add的init函数在main执行前执行,就获得了add.Name,add.Age的值
func main() {
fmt.Println("Name:", add.Name)
fmt.Println("Age:", add.Age)
}
add.go
package add var Name string // 默认 ""
var Age int // 默认 1 func init() {
Name = "hbw"
Age = 18
}
5. 包的只初始化,不引用。请开发一个程序,演示这个做法
package main import(
_ “add”
) func main () { fmt.Println(“add not refer:”)
}
函数声明和注释
1. 函数声明: func 函数名字 (参数列表) (返回值列表){}
2. 注释,两种注释,单行注释: // 和多行注释 /* */
常量
1. 常量使用const 修饰,代表永远是只读的,不能修改。
2. const 只能修饰boolean,number(int相关类型、浮点类型、complex)和string。
3. 语法:const identifier [type] = value,其中type可以省略。
4. 比较优雅的写法:
const ( a = 0 b = 1 c = 2 )
5. 更加专业的写法:
iota讲解:
https://studygolang.com/articles/2192
// iota: a为0,下面的变量自增1 const ( a = iota b // c // )
变量
1. 语法:var identifier type
package main
import (
“fmt”
“os”
) func main() {
var goos string = os.Getenv(“GOOS”)
fmt.Printf(“The operating system is: %s\n”, goos)
path := os.Getenv(“PATH”)
fmt.Printf(“Path is %s\n”, path)
}
值类型和引用类型
1. 值类型:变量直接存储值,内存通常在栈中分配。
2. 引用类型:变量存储的是一个地址,这个地址存储最终的值。内存通常在堆上分配。通过GC回收。
1. 值类型:基本数据类型int、float、bool、string以及数组和struct。
把值类型传入函数改变它的值,外面的值不会变
2. 引用类型:指针、slice、map、chan等都是引用类型。
把引用类型传入函数改变它的值,外面的值也会变
9. 写一个程序,交换两个整数的值。比如: a=3; b=4; 交换之后:a=4;b=3
package main import (
"fmt"
) // *a = 100 是内存地址里的值
func swap(a *int,b *int) {
fmt.Println("a: ", a, *a,"b: ", b, *b)
tmp := *a
*a=*b
*b=tmp
} func main(){
first:=100
second:=200
swap(&first,&second) // &first 传的是内存地址0xc042068058
fmt.Print(first,second)
}
方式二:
package main import (
"fmt"
) func main() {
a:=100
b:=200
a,b = b,a
fmt.Print(a,b)
}
变量的作用域
1. 在函数内部声明的变量叫做局部变量,生命周期仅限于函数内部。
2. 在函数外部声明的变量叫做全局变量,生命周期作用于整个包,如果是大写的,则作用于整个程序。
注意:
a := 100 // 不能在全局使用,编译会报错 // 因为它是两条语句,全局只能声明变量,不能执行代码
a := 100
等价
var a int
a = 100 // 是赋值语句,只能在函数里执行,全局它就会报错
数据类型和操作符
1. bool类型,只能存true和false
var a bool
var a bool = true
var a = true
2. 相关操作符, !、&&、||
var a bool = true
var b bool // 默认false 请问!a 、!b、a && b、a || b的值分别是多少?
a && b 与
短路特性
前面是false,它就不会求后面的表达式了
a || b 或
短路特性
前面是true,它就不会求后面的表达式了
3. 数字类型,主要有int、int8、int16、int32、int64、uint8、uint16、uint32、uint64、float32、float64
uint无符号类型 符号占一位
4. 类型转换,type(variable),比如:var a int=8; var b int32=int32(a)
package main
func main() {
var a int
var b int32
a = 15
b = a + a // compiler error
b = b + 5 // ok: 5 is a constant
}
13. 请指出下面程序的输出是什么?
package main
import “fmt”
func main() {
var n int16 = 34
var m int32 m = n // 编译报错
m = int32(n)
// Printf 格式化输出
fmt.Printf(“32 bit int is: %d\n”, m)
fmt.Printf(“16 bit int is: %d\n”, n)
}
1. 逻辑操作符: == 、!=、<、<=、>和 >=
2. 数学操作符:+、-、*、/等等
package main
Import ”fmt”
func main() {
var a int = 10
var b = a + 10
}
5. 字符类型:var a byte
var a byte = ‘c’
6. 字符串类型: var str string
package main
import “fmt”
func main() {
var str = “hello world”
fmt.Println(“str=“, str)
}
1. 字符串表示两种方式: 1)双引号 2)`` (反引号)
package main import "fmt" func main() {
var str = "hello world\n\n"
// 反引号原样输出
var str2 = `hello \n \n \n
this is a test string
This is a test string too·`
fmt.Println("str=", str)
fmt.Println("str2=", str2)
}
var b byte = 'c' 输出的是asscii表的数字和Java一样
服务器负载均衡
大型互联网公司负载均衡使用的是自己写的rpc库,实现负载均衡,健康检查
用rpc好处 rpc和web在一个进程里面rpc只是个库,这样我们就没有一个集中式的东西
LVS有个集中式的,流量都通过LVS去转发,但通过LVS转发可能有问题,LVS到了性能瓶颈,扛不住了,那所有通过LVS去转发的服务都会受影响
通过rpc去调,就不会通过集中式的中间节点,不会有断点的问题
有中间节点的话,中间节点(LVS)挂了,后面所有的等于就挂了
后面的服务器挂了一台,它会被rpc剔除,类似nginx upstream模块
Go基本数据类型的更多相关文章
- JavaScript 中的数据类型
Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...
- JS 判断数据类型的三种方法
说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...
- Python高手之路【二】python基本数据类型
一:数字 int int(整型): 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值 ...
- UniqueIdentifier 数据类型 和 GUID 生成函数
UniqueIdentifier 数据类型用于存储GUID的值,占用16Byte. SQL Server将UniqueIdentifier存储为16字节的二进制数值,Binary(16),按照特定的格 ...
- SQL Server常见数据类型介绍
数据表是由多个列组成,创建表时必须明确每个列的数据类型,以下列举SQL Server常见数据类型的使用规则,方便查阅. 1.整数类型 int 存储范围是-2,147,483,648到2,147,483 ...
- 由js apply与call方法想到的js数据类型(原始类型和引用类型)
原文地址:由js apply与call方法想到的js数据类型(原始类型和引用类型) js的call方法与apply方法的区别在于第二个参数的不同,他们都有2个参数,第一个为对象(即需要用对象a继承b, ...
- python 数据类型 ----字典
字典由一对key:value 组成的 python中常用且重量级的数据类型 1. key , keys, values 字典由一对key:value 组成的 python中常用且重量级的数据类型 1. ...
- SQL数据类型
1.Character 字符串: 数据类型 描述 存储 char(n) 固定长度的字符串.最多8,000个字符. n varchar(n) 可变长度的字符串.最多8,000个字符. varchar ...
- 跟着老男孩教育学Python开发【第二篇】:Python基本数据类型
运算符 设定:a=10,b=20 . 算数运算 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**3 ...
- 我的MYSQL学习心得(二) 数据类型宽度
我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
随机推荐
- 实例化Bean的方法(基于xml配置)-http://blog.csdn.net/shymi1991/article/details/48153293
实例化Bean的方法(基于xml配置) 标签: spring framework 2015-09-01 13:43 918人阅读 评论(0) 收藏 举报 分类: Spring FrameWork(7 ...
- ringojs 的包管理
ringojs 集成了包管理目前有几种方式 ringo-admin rp ringo-admin 安装包 我们使用ringo-admin 安装rp ringo-admin install grob/r ...
- lerna基本试用
安装 yarn global add lerna or npm install -g lerna 基本项目 初始化 git init platform cd platform lerna init 效 ...
- 【转】foxmail邮箱我已进清理了为什么还是说我的邮箱已满
原文网址:http://zhidao.baidu.com/link?url=YmX_tBenMVsCopjljd80e2Jwvh7H8GnVSrDLeKKBNQkh_Ty50IsX5eAIy4P_64 ...
- logstash使用分享
1.logstash时间处理函数 当业务场景需要自有的time字段覆盖@timestamp字段的情况下 需要使用 date { match => ["time", " ...
- linux中bin与sbin目录的作用及区别介绍
linux中bin与sbin目录的作用及区别介绍 本文介绍下,linux中的二个主要目录:bin与sbin,它们的作用与区别,学习linux的朋友可以参考下 在linux系统中,有两个重要的目录:bi ...
- 【monkeyrunner】monkeyrunner脚本录制和回放
脚本录制 1.连接你已经打开调试模式的ANDROID设备或模拟器,输入adb devices 2.运行录制脚本.在cmd窗口输入 monkeyrunner recorder.py #recorder. ...
- Jmeter的参数配置
Ramp-up Period(in seconds) [1]决定多长时间启动所有线程.如果使用10个线程,ramp-up period是100秒,那么JMeter用100秒使所有10个线程启动并运行. ...
- TCL数据类型
原始数据类型在Tcl中是字符串,我们常常可以找到字符串和引用在Tcl语言中.这些原始数据类型依次创建复合数据类型列表和关联数组.在Tcl中,数据类型可以表示不仅是简单Tcl的对象,但也可以代表相同的句 ...
- Office 2016激活教程(附KMS激活软件)
首先下载office 2016办公软件文件名:cn_office_professional_plus_2016_x86_x64_dvd_6969182.isoSHA1:277926A41B472EE3 ...