1.golang数据类型,转换,变量类型检查,生命周期、闭包,打印方法,指针简介

摘要:
main()函数中定义了变量f。变量的类型是匿名函数,f()表示调用和执行匿名函数。静态意味着在数据段中存储变量)。当golang声明一个变量时,它会在内存中分配一个位置,以便存储、修改和获取变量的值。

golang是强类型,静态语言

1.golang 数据类型

布尔类型 true/false var b bool ,在golang底层bool不是1/0表示的

数值类型 :var i int =3 / var i:=3

数字在计算机内部是以二进制的方式存储的,二进制位就是一系列布尔值,取值要么为1,要么为0.

1位表示1或0,对于4位整数可以表示16个不同的数字0~15.

带符号整数和无符号整数: 带符号整数,就是负数,需要一位来表示符号,这通常是符号-。

所以4位带符号整数的取值范围为 :-8~7 ;

浮点数: 浮点数是带小数点的数字,如11.2,0.11,32.21.: var a float64 = 0.111

字符串: var s string ="foo" ,必须用双引号 , s + = "foo",字符串的拼接

数组: 声明数组时,必须指定其长度和类型 var arrOne [4]string , arrTwo [10]int

赋值: arrOne[0] = "John" ,(通常数组的键用数字 )

2.检查变量类型用: 标准库中的reflect包

var s [2]string

fmt.Println(reflect.TypeOf(s))

3.类型转换: strconv包提供一整套类型装换方法,

var s string = "true"

b.err:=strconv.ParseBool(s ) 字符串转换布尔

s:=strconv.FormatBool(true) 布尔值转换成字符串

4.多变量赋值

var s,t string = "foo","bar"

var(

s string = "foo"

i int =4

)

默认值:整数0,浮点型0,布尔值false, 字符串就是“” 空字符串,打印:

var (
  i int
  f float32
  b bool
  s string
)
fmt.Printf("%v %v %v %q ",i,f,b,s) //0 0 false ""
package main

import (
"fmt"
"time"
)

const DefaultClientTimeout = 30 * time.Second

type Client struct{
cache map[string]interface{}
Host string
Timeout time.Duration
}

func NewClient(host string) *Client{ //指向client结构体的一个指针,指针返回的是变量的地址,取出地址的值就用**Client
return &Client{
cache: map[string]interface{}{"name":"liufeng","age":21},
Host:host,
Timeout:DefaultClientTimeout,
}
}

func main(){
tt :=NewClient("www.baidu.com")
fmt.Println(&tt.Host)
fmt.Println(&tt)
fmt.Println(tt.Host)
fmt.Println(tt.cache["name"])
fmt.Println(tt.cache["age"])
}

fmt.Printf("%f",1.23) %p 输出浮点数

fmt.Printf("%d",123) %p 输出整数

fmt.Printf("%+v",b) %+v 值输出,fmt.Printf("%p",&b) %p 输出指针地址 &b

fmt.Printf() 配合占位符,打印数据。

fmt.Println(打印字字符串内容)

9.打印变量的方法:

 

它不关心这些捕获了的变量和常量是否已经超出了作用域,所以只有闭包还在使用它,这些变量就还会存在。

因为匿名函数(闭包),有一个很重要的特点:

由于在定义Test( )函数时指定了返回的类型是一个匿名函数,并且该匿名函数返回的类型是整型。所以在Test( )函数中定义了一个匿名函数,并且将整个匿名函数返回,匿名函数返回的是整型。在main( )函数中定义了一个变量f,该变量的类型是匿名函数,f( )表示调用执行匿名函数。最终执行完成后发现,实现了数字的累加。虽然Test()已经返回了,但是返回的值:func()还在全局变量中使用,三次调用 f(),因此返回值会保存在堆上,即使栈释放了内存资源,但func()保存在堆中,数据不会释放。

}

fmt.Println(f())

fmt.Println(f())

f:=Test()fmt.Println(f())

func main(){

}

}

return x

x++

return func()int{

var x int

func Test() func() int{ //func() 这个就是匿名函数,作为类型返回值int

利用匿名函数,实现每次调用变量累加值

  • 堆(heap):堆是用于存放进程执行中被动态分配的内存段。它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时。新分配的内存就被动态加入到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)

  • 栈(stack):栈又称堆栈, 是用户存放程序暂时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包含static声明的变量。static意味着在数据段中存放变量)。

8.匿名函数类型,常用在闭包中,讲到闭包就要理解变量声明周期。

 

2.在函数 返回值中 用指针,在最后函数返回值的时候 返回值的地址。接受函数返回值的变量也可以直接打印出来值,应该是印值复制的。

总结: 1.在函数 形参中用 指针*int , 在调用函数 传入变量的地址 &var

 

7.指针的灵活使用:

 

6.常量声明: const

(在golang中只有三种引用类型它们分别是切片slice、字典map、管道channel。其它的全部是值类型,引用类型可以简单的理解为指针类型,它们都是通过make完成初始化)

打印变量内存地址: fmt.Println(&s) ,内存地址是十六进制表示

var s string = "hello,world"

要获取变量在内存中的地址,可在变量名前加上&字符。

golang在声明变量时,在内存中分配了一个位置,以便能够存储,修改和获取变量的值。

5.使用指针, 指针是golang的一种类型,指向变量所在的内存单元,声明在变量名前加上* 星号字符。

 

变量作用域:指变量在什么地方可以使用,而不是变量在什么地方声明。

简短变量声明: s : = "hello,world" ; 注意 golang规定不能再函数外面使用 简短变量声明

免责声明:文章转载自《1.golang数据类型,转换,变量类型检查,生命周期、闭包,打印方法,指针简介》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇检测当前运行环境——移动端与PC端。Timer 的缺陷下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

给微信小程序添加简单小动画

需要实现的效果很简单,当微信小程序跳转到该页面时,微信登录BUTTON从右往左淡入出现,手机登录BUTTON从左往右淡入出现,类似于animation.css的简单效果 官方文档上是这样说的: ①创建一个动画实例 animation。 ②调用实例的方法来描述动画。 ③最后通过动画实例的 export 方法导出动画数据传递给组件的 animation 属性...

shell 脚本 常用命令

Shell 脚本常用命令  Shell脚本是Linux开发工作中常用的工具,但是我一直没有找到一个适合自己的简明扼要的HandBook。在工作过程中整理了一下,贴在这里已备查看。 1           Shell中的特殊符号 1.1           $  美元符号。用来表示变量的值。如变量NAME的值为Mike,则使用$NAME就可以得到“Mike...

Spring Boot集成thymeleaf异步刷新页面

 现在比较流行前后端分离开发,但在有些业务场景下模板引擎也用的不少。本文介绍thymeleaf页面的局部更新,Spring Boot采用的是2.0.4,先来看代码。 IndexController.java: package com.example.demo.thymeleaf; import org.springframework.stereoty...

Node.js中的模块接口module.exports浅析

在写node.js代码时,我们经常需要自己写模块(module)。同时还需要在模块最后写好模块接口,声明这个模块对外暴露什么内容。实际上,node.js的模块接口有多种不同写法。这里作者对此做了个简单的总结。 返回一个JSON Object 如下代码是一个简单的示例。 1 var exp ={ 2 "version": "1.0.0", 3...

java 类型转换

在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能。本文将对常用的转换方法进行一个总结。常用的方法有Object.toString(),(String)要转换的对象,String.valueOf(Object)等。下面对这些方法一一进行分析。方法1:采用 Object.toString()方法请看下面的例子:      Obj...

im4java包处理图片

使用方法:首先要安装ImageMagick这个工具,安装好这个工具后,再下载im4java包放到项目lib目录里就行了。packagecom.stu.util; importjava.io.IOException; importjava.util.ArrayList; importorg.im4java.core.Composit...