zoukankan      html  css  js  c++  java
  • Go new 和 make的区别

    1.new 返回的是指针类型,所以一般用于给非引用类型(int,string,array等)

    package main
    
    //定义一个struct
    type Person struct {
    	Name string
    	Age  int
    }
    
    func main() {
    	p1 := Person{
    		Name: fmt.Sprintf("你好呀:%v", "张三"),
    		Age:  18,
    	}
    	fmt.Printf("type:%T,value:%v
    ", p1, p1)
    	// 取出变量的内存地址,也就是指针,是通过&变量名
    	// 也就是 &p1
    	fmt.Printf("type:%T,value:%v
    ", &p1, p1)
    
    	// new 返回的是指针类型
    	p2 := new(Person)
    
    	// 指针类型访问这个类型的属性和方法
    	// 可以通过 (*p2).Name
    	// 也可以通过 p2.Name ,这种方式其实是Go的语法糖,本质上还是通过 (*p2).Name
    	p2.Name = fmt.Sprintf("你好呀:%v", "李四")
    	(*p2).Name = fmt.Sprintf("你好呀:%v", "王五")
    	p2.Age = 20
    
    	fmt.Printf("type:%T,value:%v
    ", p2, p2)
    
    	// 通过指针找到变量,是通过*变量名
    	// 也就是 *p2
    	fmt.Printf("type:%T,value:%v
    ", *p2, p2)
    }
    

    2. make 用于引用类型(map,slice,channel),一般多用于初始化

    // map的初始化
    maps := make(map[string]string, 10)
    
    // channel的初始化
    channel := make(chan string, 10)
  • 相关阅读:
    内部类,匿名内部类?
    抽象和接口的区别?
    多态的好处?
    怎么防止重复提交?
    java网络编程第二章
    java网络编程第一章
    多态的好处
    静态变量与实例变量(方法)的区别
    杨辉三角
    鸿蒙系统之内核层
  • 原文地址:https://www.cnblogs.com/python-boy/p/12785395.html
Copyright © 2011-2022 走看看