ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Golang 语言特性

2022-01-10 21:04:49  阅读:116  来源: 互联网

标签:语言 string fmt 特性 Golang age 指针 s1 name


1. 函数

与c 语言不同,go 语言中,函数的参数和返回值都由栈来存储。

传值:函数调用时会复制参数,被调用方和调用方持有两份不相关的两份数据
传引用:函数调用时会传递参数指针,被调用方和调用方持有相同的数据,任意一方做出修改都会影响另一方

  • 不同的语言选择不同的方式传递参数,go函数的参是传值类型。无论是传递基本类型,结构体还是指针,都会对传递的参数进行复制。
  • 将指针作为参数传入函数时,函数内部会复制指针,也就是会同时出现两个指针指向原有的内存空间,因此 go 语言中传指针本质上也是传值。
  • 如果值参数大小比较大,比如长数组,那么copy 参数内容会对性能造成很大的影响。此时,传指针类型性能更好一些。
package main

import (
    "encoding/json"
    "fmt"
)

type s1 struct {
    // 字段小写开头是不能被外界访问到的,json 序列化取不到值。这种称为小写开头的字段称为私有属性。
    Name string
    Age int
}

type s2 struct {
    Addr string
    Married bool `json:"married"`  // 结构体 tag
}

type s3 struct {
    Hobby string
    // 结构体嵌套
    FromS1 s1
    // 结构体匿名嵌套
    s2 // 架构体的匿名字段
}

func main() {

    // 1. 结构体初始化
    var s s3
    s.Hobby = "Games"
    //s.fromS1 = s1{name: "siri",age: 18}
    s.FromS1.Name = "siri"
    s.FromS1.Age = 18
    s.s2.Addr = "Beijing"
    s.s2.Married = false

    fmt.Println(s)
    data,_ := json.Marshal(s)
    fmt.Printf("%s\n",data)

    // 2. 匿名结构体。即 非 type 关键字声明的结构体
    var p struct{
        name string
        age int
    }
    p.name = "Bob"
    p.age = 19
    fmt.Println(p)

    // 3. 指针类型的方法
    ss := s1{Name: "jeans",Age: 20}
    ss.ChangeName("Bill",80)
    fmt.Println(ss)  // 名字和年龄被修改了
}

func (s *s1)ChangeName(name string,age int) {
    s.Name = name
    s.Age = age
}


标签:语言,string,fmt,特性,Golang,age,指针,s1,name
来源: https://www.cnblogs.com/notes201432273/p/15785876.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有