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基本数据类型的更多相关文章

  1. JavaScript 中的数据类型

    Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...

  2. JS 判断数据类型的三种方法

    说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...

  3. Python高手之路【二】python基本数据类型

    一:数字 int int(整型): 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值 ...

  4. UniqueIdentifier 数据类型 和 GUID 生成函数

    UniqueIdentifier 数据类型用于存储GUID的值,占用16Byte. SQL Server将UniqueIdentifier存储为16字节的二进制数值,Binary(16),按照特定的格 ...

  5. SQL Server常见数据类型介绍

    数据表是由多个列组成,创建表时必须明确每个列的数据类型,以下列举SQL Server常见数据类型的使用规则,方便查阅. 1.整数类型 int 存储范围是-2,147,483,648到2,147,483 ...

  6. 由js apply与call方法想到的js数据类型(原始类型和引用类型)

    原文地址:由js apply与call方法想到的js数据类型(原始类型和引用类型) js的call方法与apply方法的区别在于第二个参数的不同,他们都有2个参数,第一个为对象(即需要用对象a继承b, ...

  7. python 数据类型 ----字典

    字典由一对key:value 组成的 python中常用且重量级的数据类型 1. key , keys, values 字典由一对key:value 组成的 python中常用且重量级的数据类型 1. ...

  8. SQL数据类型

    1.Character 字符串: 数据类型 描述 存储 char(n) 固定长度的字符串.最多8,000个字符. n varchar(n) 可变长度的字符串.最多8,000个字符.   varchar ...

  9. 跟着老男孩教育学Python开发【第二篇】:Python基本数据类型

    运算符 设定:a=10,b=20 . 算数运算 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**3 ...

  10. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

随机推荐

  1. 7-31 The World's Richest(25 分)

    Forbes magazine publishes every year its list of billionaires based on the annual ranking of the wor ...

  2. JDBC的操作步骤

    JDBC的操作步骤 一.什么是JDBC JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问 ...

  3. Spring bean作用域

    全当知识要点记录了,大家随意踩踩. spring的作用域有以下几种singleton作用域prototype作用域request作用域session作用域global-session作用域 1. si ...

  4. CCFlow SDK模式开发(有比较详细的代码,以服务的形式与ccflow数据库进行数据交互)

    http://www.cnblogs.com/s0611163/p/3963142.html 需求: 1.业务数据要保存在我们自己的数据库里     2.CCFlow有保存草稿的功能,但是领导要求每个 ...

  5. Phonegap 开发环境搭建

    以Android为例介绍Phonegap开发环境搭建 一. 软件下载 1. JDK 8 下载 http://www.oracle.com/technetwork/java/javase/downloa ...

  6. Nagios配置文件说明

    Lepus 安装配置:http://www.cnblogs.com/xuanzhi201111/p/5200757.html Nagios 各个目录用途说明如下:bin                ...

  7. 复制mysql数据库的步骤

    Navicat 转存sql文件 然后命令 mysql -uroot -p123456 dbname < e:/backup/20141014.sql

  8. ThinkJava-压缩

    尽管存在许多种压缩算恙,但是Zip和GZIP可能是最常用的.因此我们可以很容易地使用多 种可读写这些格式的工具来操纵我们的压缩数据.   1 用GZIP进行简单压缩 GZIP接口非常简单, 因此如果我 ...

  9. selenium笔记2017

    1,from time import sleep(先引入关键词) sleep(5)       (就可以使用这个命令了) 可以停止页面5秒 1-1. 等待页面元素出现的时间(即没出现时,等待元素出现) ...

  10. 学习笔记之C# 教程 | 菜鸟教程

    C# 教程 | 菜鸟教程 http://www.runoob.com/csharp/csharp-tutorial.html 菜鸟教程在线编辑器 http://www.runoob.com/try/r ...