美文网首页
golang变量(一)——常规变量

golang变量(一)——常规变量

作者: yushu_bd | 来源:发表于2019-01-10 12:13 被阅读0次

一、作用域

 go语言中的变量的作用域都是在{ }的,在遇到{}嵌套,重新定义同一个变量时时,优先使用内部定义的变量。
package main
import "fmt"
var num = 100

func show() {
    fmt.Println("function show : num : ", num)
    num :=10
    fmt.Println("function show : redefine num : ", num)
    {
        fmt.Println("function show : scope num : ", num)
        num :=5
        fmt.Println("function show : scope redefine num : ", num)
    }
}

func main() {
    fmt.Println("function main : num : ", num)
    num +=100
    fmt.Println("function show : add num : ", num)
    show()
}

结果输入如下(程序不会报错):

function main : num :  100
function show : add num :  200
function show : num :  200
function show : redefine num :  10
function show : scope num :  10
function show : scope redefine num :  5

二、:= 和 =

最简单的讲:= 是给未定义的变量 定义类型的同时给予赋值,而 = 必须是已经声明类型的变量才能使用,比如简单的如下:

var  a int
a = 100
a := 100 //报错,但非 同一个{},可以使用
b := 10

再看一个作用域和指针的 := 引起的问题:

var p *int
func foo() (*int) {
  var i = 100
  return &i
}

func bar() {
    fmt.Println(*p)
}

func main() {
  p :=foo()//这里的p和 var p 已经不是同一个地址了,因为作用域的问题
  p = foo() //改成这样不会报错,因为复用了 var p
  bar() // 会报错,bar用的var p; 
  fmt.Println(*p)
}

所以 千万注意 := 引起的 变量覆盖问题,会因为不合理使用,造成多个重复变量出现,而= 比较保险,不会产生新变量

三、字符串

cap空间

先看一下,下面代码:

s:="a"
s1:=[]byte{'a'}
fmt.Println(cap([]byte(s)))
fmt.Println(cap([]byte(s1)))

猜猜会输出什么,1 1? no!是32 1。这里解释一下,go中string底层实现是一个结构体,根据struct 大小计算规则和字节对齐,所以string最少是32。

struct String
{
        byte*   str;
        intgo   len;
};

中文字符长度

统计中英文字符,不能直接用len,具体如下:

s ="北京天安门abc!"
fmt.Println(len(s), utf8.RuneCountInString(s))
// 输出:19 10

下期讲一下衍生类型的变量

相关文章

  • golang变量(一)——常规变量

    一、作用域 结果输入如下(程序不会报错): 二、:= 和 = 最简单的讲:= 是给未定义的变量 定义类型的同时给予...

  • golang-reflect 2021-11-21

    golang变量 = type + value golang里,一个变量,只要确定了它的类型和值,就可以确定该变量...

  • golang 多参数 for 循环

    一个变量的 golang for 循环 多变量 goalng for 循环 这么写的原因还是在于,golang 多...

  • 2019-01-30

    # golang环境变量 ## 1、查看环境变量 ## 2、设置环境变量 ### 2.1 linux环境 ### ...

  • Learn Golang in Day 8

    Learn Golang in Day 8 变量作用域 局部变量 全局变量 形参也是局部变量 局部变量 函数内部声...

  • Golang:变量

    声明一个变量 语法:var name type 语句 var age int 声明了一个名为 age 类型为 in...

  • Go教程第三篇:变量

    Go教程第三篇:变量 本文是《Golang系列教程》第三篇文章,它主要讲解golang中变量的用法。 什么是变量 ...

  • Golang并发操作变量需要注意的问题

    思考源于这个问题: golang 中并发读写同一个变量会出现部分错乱吗? 要记得golang中变量的赋值不是并发安...

  • Golang入门一:变量

    变量声明 变量初始化 变量赋值 变量交换 匿名变量

  • 2021-12-08 linux golang 安装

    安装golang包 配置环境变量, 编辑/etc/profile文件, 添加在末尾 刷新环境变量

网友评论

      本文标题:golang变量(一)——常规变量

      本文链接:https://www.haomeiwen.com/subject/lhiorqtx.html